第十四章、磁盤及文件系統管理詳解
08_03_磁盤及文件系統管理詳解之一
磁盤管理:
機械式硬盤:
U盤、光盤、軟盤、硬件、磁帶
此處查看PPT: Linux入門.ppt (search: 文件系統)
補充磁盤分區、文件系統、inode,VFS等相關知識後繼續。
分區以柱面爲單位進行劃分。
inode: index node, 保存了文件的信息,大小,屬主,屬組,時間等。
inode位圖,塊位圖
1. ln [-s -v] SRC DEST
硬鏈接:
1、只能對文件創建,不能應用於目錄;
2、不能跨文件系統;
3、創建硬鏈接會增加文件被鏈接的次數;
符號鏈接:
1、可應用於目錄;
2、可以跨文件系統;
3、不會增加被鏈接文件的鏈接次數;
4、其大小爲指定的路徑所包含的字符個數;
2. du: 顯示路徑下所有目錄佔用磁盤大小
-s: 路徑佔用磁盤大小
-h: human readable
3. df: 顯示整個磁盤分區使用情況
-i: 顯示inode信息替代塊信息
-P: posix輸出格式(文件名太長不換行)
08_04_磁盤及文件系統管理詳解之二
設備文件:
b: 按塊爲單位,隨機訪問的設備;如硬盤
c:按字符爲單位,線性設備;如鍵盤
ls -l /dev
主設備號(major number)
標識設備類型
次設備號(minor number)
標識同一種類型中不同設備
設備文件作爲設備的訪問入口。
tty 命令可以查看對應設備文件
[root@CentOS tmp]# tty
/dev/pts/2
echo "hello" >> /dev/pts/1
mknod
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m MODE
硬盤設備的設備文件名:
IDE, ATA:hd
SATA:sd
SCSI: sd
USB: sd
a,b,c,...來區別同一種類型下的不同設備
IDE:
第一個IDE口:主、從
/dev/hda, /dev/hdb
第二個IDE口:主、從
/dev/hdc, /dev/hdd
sda, sdb, sdc, ...
hda分區:
hda1: 第一個主分區
hda2:
hda3:
hda4:
hda5: 第一個邏輯分區
Linux支持的文件系統
傳統:ext2, ext3, ext4, reiserfs, xfs, jfs
光盤:iso9660
集羣文件系統:GFS2, OCFS2
網絡文件系統: NFS, CIFS
低級格式化:將空白的磁盤劃分出柱面和磁道,再將磁道劃分爲若干個扇區等
高級格式化:創建文件系統
VFS:virtual file system
一個分區就是一個獨立的文件系統,可以單獨格式化
查看當前系統識別了幾塊硬盤:
fdisk -l [/dev/to/some_device_file]
管理磁盤分區:
fdisk /device/path
p: 顯示當前硬件的分區,包括沒保存的改動
n: 創建新分區
e: 擴展分區
p: 主分區
l: 邏輯分區
d: 刪除一個分區
w: 保存退出
q: 不保存退出
t: 修改分區類型
L:
l: 顯示所支持的所有類型
partprobe: 讓內核重讀分區表,cat /proc/partations 中查看分區表,
partprobe [/dev/sda/]
partx: Redhat6.0中類似partprobe的命令
09_01_磁盤及文件系統管理詳解之三
查看Linux入門.ppt(search: 超級塊),補充塊組、超級塊等相關知識。
超級塊(Super Block)
描述整個分區的文件系統信息,例如塊大小、文件系統版本號、上次mount的時間等等
超級塊在每個塊組的開頭都有一份拷貝
塊組描述符表(GDT,Group Descriptor Table)
由很多塊組描述符組成,整個分區分成多少個塊組就對應有多少個塊組描述符
每個塊組描述符(Group Descriptor)存儲一個塊組的描述信息,例如在這個塊組中從哪裏開始是inode表,從哪裏開始是數據塊,空閒的inode和數據塊還有多少個等等
和超級塊類似,塊組描述符表在每個塊組的開頭也都有一份拷貝,這些信息是非常重要的,一旦超級塊意外損壞就會丟失整個分區的數據,一旦塊組描述符意外損壞就會丟失整個塊組的數據,因此它們都有多份拷貝
塊位圖(Block Bitmap)
塊位圖就是用來描述整個塊組中哪些塊已用哪些塊空閒的,它本身佔一個塊,其中的每個bit代表本塊組中的一個塊,這個bit爲1表示該塊已用,這個bit爲0表示該塊空閒可用
與此相聯繫的另一個問題是:在格式化一個分區時究竟會劃出多少個塊組呢?主要的限制在於塊位圖本身必須只佔一個塊
inode位圖(inode Bitmap)
和塊位圖類似,本身佔一個塊,其中每個bit表示一個inode是否空閒可用
inode表(inode Table)
一個文件除了數據需要存儲之外,一些描述信息也需要存儲,例如文件類型(常規、目錄、符號鏈接等),權限,文件大小,創建/修改/訪問時間等,也就是ls -l命令看到的那些信息,這些信息存在inode中而不是數據塊中
每個文件都有一個inode,一個塊組中的所有inode組成了inode表
inode表佔多少個塊在格式化時就要決定並寫入塊組描述符中
mke2fs格式化工具的默認策略是一個塊組有多少個8KB就分配多少個inode
數據塊(Data Block)
對於常規文件,文件的數據存儲在數據塊中
對於目錄,該目錄下的所有文件名和目錄名存儲在數據塊中,文件名保存在它所在目錄的數據塊中
除文件名之外,ls -l命令看到的其它信息都保存在該文件的inode中
目錄也是一種文件,是一種特殊類型的文件
對於符號鏈接,如果目標路徑名較短則直接保存在inode中以便更快地查找,如果目標路徑名較長則分配一個數據塊來保存
設備文件、FIFO和socket等特殊文件沒有數據塊,設備文件的主設備號和次設備號保存在inode中
inode table格式:
ext3比ext2多一個日誌區,存入元數據區的inode,先放入日誌區,文件寫完成後移動到元數據區
09_02_磁盤及文件系統管理詳解之四
文件系統管理
格式化:重新創建文件系統會損壞原有文件
創建分區
1. fdisk /dev/sda
2. n -> e -> 4 -> <Enter> -> <Enter> 創建一個擴展分區,使用MBR第四個位置,從開頭到結尾(使用所有剩餘的空間)
3. n -> +5G 創建一個5G的邏輯分區
4. w 保存退出
5. partprobe /dev/sda 讓內核識別新建分區,cat /proc/partitions
mkfs: make file system,創建文件系統
-t FSTYPE:指定文件系統類型
cat /proc/filesystems : 查看當前內核所支持文件系統類型
文件系統類型:
ext2
ext3:比ext2多一個journal區
vfat: fat32
mkfs其實會調用其他的程序
mkfs -t ext2 = mkfs.ext2
mkfs -t ext3 = mkfs.ext3
專門管理ext系列文件系統:
1. mke2fs
-j: 創建ext3類型文件系統
-b BLOCK_SIZE: 指定塊大小,默認爲4096;可用取值爲1024、2048或4096;
-L LABEL:指定分區卷標;
-m #: 指定預留給超級用戶的塊數百分比
-i #: 用於指定爲多少字節的空間創建一個inode,默認爲8192;這裏給出的數值應該爲塊大小的2^n倍;
-N #: 指定inode個數;
-F: 強制創建文件系統;
-E: 用戶指定額外文件系統屬性;
2. blkid: 查詢或查看磁盤設備的相關屬性
UUID:通用唯一識別碼 (Universally Unique Identifier)
TYPE:文件系統類型
LABEL: 卷標
3. e2label: 用於查看或定義卷標
e2label 設備文件卷標: 設定卷標
4. tune2fs: 調整文件系統的相關屬性
-j: 不損害原有數據,將ext2升級爲ext3;
-L LABEL: 設定或修改卷標;
-m #: 調整預留百分比;
-r #: 指定預留塊數;
-o: 設定默認掛載選項;
acl
-c #:指定掛載次數達到#次之後進行自檢,0或-1表關閉此功能;
-i #: 每掛載使用多少天后進行自檢;0或-1表示關閉此功能;
-l: 顯示超級塊中的信息;
5. dumpe2fs: 顯示文件屬性信息
-h: 只顯示超級塊中的信息
6. fsck: 檢查並修復Linux文件系統
-t FSTYPE: 指定文件系統類型
-a: 自動修復
7. e2fsck: 專用於修復ext2/ext3文件系統
-f: 強制檢查;
-p: 自動修復;
一個文件系統想要使用必須掛載到根文件系統
掛載:將新的文件系統關聯至當前根文件系統
卸載:將某文件系統與當前根文件系統的關聯關係預以移除;
8. mount:掛載
mount 設備 掛載點
設備:
設備文件:/dev/sda5
卷標:LABEL=“”
UUID: UUID=“”
掛載點:目錄
要求:
1、此目錄沒有被其它進程使用;
2、目錄得事先存在;
3、目錄中的原有的文件將會暫時隱藏;
新掛載的文件系統下會出現
新建的文件系統: lost+found 目錄
mount: 顯示當前系統已經掛載的設備及掛載點
mount [options] [-o options] DEVICE MOUNT_POINT
-a: 表示掛載/etc/fstab文件中定義的所有文件系統
-n: 默認情況下,mount命令每掛載一個設備,都會把掛載的設備信息保存至/etc/mtab文件;使用-n選項意味着掛載設備時,不把信息寫入此文件;
-t FSTYPE: 指定正在掛載設備上的文件系統的類型;不使用此選項時,mount會調用blkid命令獲取對應文件系統的類型;
-r: 只讀掛載,掛載光盤時常用此選項
-w: 讀寫掛載
-o: 指定額外的掛載選項,也即指定文件系統啓用的屬性;
remount: 重新掛載當前文件系統
ro: 掛載爲只讀
rw: 讀寫掛載
e.g: mount -o remount,ro /dev/sda5
掛載完成後,要通過掛載點訪問對應文件系統上的文件;
9. umount: 卸載某文件系統
umount 設備
umount 掛載點
-l: 強制卸載
卸載注意事項:
掛載的設備沒有進程使用;
練習:
1、創建一個2G的分區,文件系統爲ext2,卷標爲DATA,塊大小爲1024,預留管理空間爲磁盤分區的8%;掛載至/backup目錄,要求使用卷標進行掛載,且在掛載時啓動此文件系統上的acl功能;
# mke2fs -L DATA -b 1024 -m 8 /dev/sda7
# mount -o acl LABEL=DATA /backup
或分兩步:
# tune2fs -o acl /dev/sda7
# mount LABEL=DATA /backup
2、將此文件系統的超級塊中的信息中包含了block和inode的行保存至/tmp/partition.txt中;
# tune2fs -l | egrep -i "block|inode" >> /tmp/partition.txt
# dumpe2fs -h | egrep -i "block|inode" >> /tmp/partition.txt
3、複製/etc目錄中的所有文件至此文件系統;而後調整此文件系統類型爲ext3,要求不能損壞已經複製而來的文件;
# cp -r /etc/* /backup
# tune2fs -j /dev/sda7
4、調整其預留百分比爲3%;
# tune2fs -m 3 -L DATA /dev/sda7
5、以重新掛載的方式掛載此文件系統爲不更新訪問時間戳,並驗正其效果;
# stat /backup/inittab
# cat /backup/inittab
# stat
# mount -o remount,noatime /backup
# cat
# stat
6、對此文件系統強行做一次檢測;
e2fsck -f /dev/sda7
7、刪除複製而來的所有文件,並將此文件系統重新掛載爲同步(sync);而後再次複製/etc目錄中的所有文件至此掛載點,體驗其性能變化;
# rm -rf /backup/*
# mount -o remount,sync /backup
# cp -r /etc/* /backup
09_03_磁盤及文件系統管理詳解之五
swap分區: 類似windows的虛擬內存
page out = swap in
page in = swap out
free: 查看當前系統上物理內存和交換分區的使用情況
-m: MB爲單位顯示
# free -m
total used free shared buffers cached
Mem: 490 394 95 0 142 101
-/+ buffers/cache: 149 340
Swap: 1023 0 1023
-/+ buffers/cache: 149(減去buffers+cached) 340(加上buffers+cached)
buffer: 存放元數據
cache: 存放數據
創建交換分區: mkswap, swapon
1. fdisk /dev/sda
2. n -> <Enter> -> +1G 創建一個新分區,大小1G
3. t -> 8 -> L -> 82 調整分區類型爲82(Linux swap),L查看可用分區類型
4. w
5. mkswap /dev/sda8 創建交換分區文件系統
-L LABEL
6. swapon /dev/sda8 啓用交換分區
-a:啓用所有的定義在/etc/fstab文件中的交換設備
swapoff /dev/sda8 關閉交換分區
迴環設備:使用軟件來模擬實現硬件
loopback, 使用軟件來模擬實現硬件
如果磁盤已經沒有空間可以創建新的分區,可以創建一個鏡像文件,當作一塊硬盤來用。
dd命令:
if=數據來源
of=數據存儲目標
bs=# :block size,以多大爲單位,如1M
count=#:計數
seek=#: 創建數據文件時,跳過的空間大小;
dd if=/dev/zero of=/root/tmp seek=1023 bs=1M count=1
表示跳過1023個bs,複製1個bs,ls查看文件大小爲1G,du -sh 查看文件實際只有1M
dd不以文件爲單位,而直接複製文件流,可以實現只複製一部分文件。
e.g:
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1 備份磁盤MBR
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1 恢復MBR
使用文件創建swap分區:
1. dd if=/dev/zero of=/var/swapfile bs=1M count=1024 創建一個1G的文件
2. mkswap /var/swapfile
3. swapon /var/swapfile
cat /dev/cdrom > /root/rhel5.iso 把光盤製作成ISO鏡像
/dev/null :數據黑洞,吞噬一切數據
/dev/zero:數據泡泡,產生無限0
mount命令,可以掛載iso鏡像;
mount DEVICE MOUNT_POINT
-o loop: 掛載本地迴環設備
文件系統的配置文件/etc/fstab
OS在初始時,會自動掛載此文件中定義的每個文件系統
如果只是使用命令:mount /dev/sda5 /mnt/test,重啓後掛載的文件就不存在了
/etc/fstab 格式:
要掛載的設備 掛載點 文件系統類型 掛載選項 轉儲頻率(每多少天做一次完全備份) 文件系統檢測次序(只有根可以爲1)
/dev/sda5 /mnt/test ext3 defaults 0 0
mount -a:掛載/etc/fstab文件中定義的所有文件系統
fuser: 查看正在使用文件或套接字文件的進程
-v: 查看某文件上正在運行的進程
-k: kill
-m: mount
fuser -km MOUNT_POINT:終止正在訪問此掛載點的所有進程
練習:
1、創建一個5G的分區,文件系統爲ext3,卷標爲MYDATA,塊大小爲1024,預留管理空間爲磁盤分區的3%,要求開機後可以自動掛載至/data目錄,並且自動掛載的設備要使用卷標進行引用;
# fdisk /dev/sdb
n -> p -> <Enter> -> +5G -> w
# mke2fs -j -L MYDATA -b 1024 -m 3
# mkdir /data
# vi /etc/fstab加一行
LABEL='MYDATA' /data ext3 default 0 0
2、創建一個本地迴環文件/var/swaptemp/swapfile來用於swap,要求大小爲512MB,卷標爲SWAP-FILE,且開機自動啓用此交換設備;
# mkdir /var/swaptemp
# dd if=/dev/zero of=/var/swaptemp/swapfile bs=1M count=512
# mkswap -L SWAP-FILE /var/swaptemp/swapfile
# vi /etc/fstab
/var/swaptemp/swapfile swap swap defaults 0 0
3、上述第一問,如何讓其自動掛載的同時啓用ACL功能;
#vi /etc/fstab
LABEL='MYDATA' /data ext3 defaults,acl 0 0