Linux磁盤及檔案系統管理
檔案接口:open(), read(), write(), close()
裝置類别:
塊(block):随機通路,資料交換機關為“塊”
字元(character):線性,資料交換機關為字元
裝置檔案:FHS(LSB)
/dev/: 裝置
裝置檔案,關聯至裝置的驅動程式
裝置号:
major:主裝置号,差別裝置類别,用于标明所需驅動程式
minor:次裝置号,
磁盤裝置檔案:
IDE接口(ATA):并行, 133MB/s
兩個IDE控制器:每個控制器可通過線纜接入兩塊磁盤,一主一從;
/dev/hd[a-z][#]
/dev/hda, /dev/hdb,
/dev/hdc, /dev/hdd
SCSI接口: 并行,Small Computer System Interface
UltraSCSI 320, 320MB/s
SATA接口:串行,Serial ATA,
6Gpbs
USB接口:串行,480MB/s
SAS接口:串行
裝置檔案:/dev/sd[a-z][#]
[a-z]:标記裝置
[#]:磁盤分區
track: 磁道
sector: 扇區
cylinder: 柱面
尋道時間:平均尋道時間
MBR:0磁道0扇區,主引導扇區(master boot record)
三部分:
446bytes: bootloader,程式
64bytes: 分區表
16bytes:标記一個分區
4個主分區:3主,1擴充-->n邏輯分區
2bytes: 55AA, 目前MBR資訊是否有效的标記;
分區辨別方式:
主分區或擴充分區:1-4
邏輯分區:5+
fdisk指令:
1、檢視已經識别的磁盤裝置:
# fdisk -l /dev/[hs]d[a-z]
2、管理分區
# fdisk DEVICE
fdisk提供了一個互動式接口來管理分區,它有許多子指令,分别用于不同的管理功能;所有的操作均在記憶體中完成,沒有直接同步到磁盤;
常用指令:
p: 顯示現有分區表;
n: 建立新分區
d: 删除現有分區
t: 修改分區ID
l: 檢視支援哪些分區ID
w: 儲存退出
q: 不儲存退出
m: 顯示幫助資訊
示例:/dev/sdb
3主+1擴充(3個邏輯)
2主+1擴充(4個邏輯)
檢視核心是否已經識别建立分區:
# cat /proc/partitions
通知核心強制重讀分區表:
CentOS 5: partprobe /dev/DEVICE
CentOS 6: partx, kpartx
partx -a /dev/DEVICE
kpartx -af /dev/DEVICE
注意:成功讀取分區,可能需要指令重複執行2次或以上;
建立檔案系統:
檔案系統:
中繼資料:每個索引項稱一個inode, (index node)
/var/logs/messages
根的inode --> 根目錄對應的磁盤塊 --> var對應的inode編号 --> 查inode table, 找到編号對應的inode --> var目錄的磁盤塊 --> logs 的inode編号 --> 查inode table, 找到logs目錄的inode --> logs目錄的磁盤塊 --> 找到messages檔案名對應的inode編号 -->查inode表,找到messages的inode編号對應的inode --> messages的磁盤塊
連結檔案:通路同一個檔案資料不同路徑
硬連結:兩個檔案路徑指向了同一個inode;
建立方法:
# cp -l SRC DEST
# ln SRC DEST
特性:
(1) 目錄不支援硬連結;
(2) 硬連結不能跨檔案系統;
(3) 硬連結檔案與原檔案是指向同一個inode,建立硬連結檔案會增加inode的引用計數;
符号連結:連結檔案是一個完全獨立的新檔案,但其指向了原檔案的檔案路徑;
(1) 符号連結檔案與原檔案是兩個各自獨立檔案;
(2) 目錄可以建立符号連結;
(3) 可以跨檔案系統;
(4) 删除連結不影響原檔案;但删除原檔案,符号連結指向的檔案路徑将不複存在,是以,此時連結檔案将變成失效的連結;
其大小并非真正原檔案大小,而是指向的原檔案的檔案路徑字元串所包含的位元組數;
ln -s SRC DEST
bitmap索引
block group:
bitmap: inode, block
VFS: Virtual File System
Linux檔案系統:ext2, ext3, ext4, reiserfs, xfs, btrfs
光驅:iso9660
網絡檔案系統:nfs, cifs
叢集檔案系統:gfs2, ocfs2
分布式檔案系統:ceph
windows檔案系統:ntfs, vfat
僞檔案系統: tmpfs, hugepagefs, proc, sysfs
Unix的檔案系統:FFS, UFS, JFS
交換檔案系統:swap
檔案系統管理工具:
建立檔案系統
mkfs.ext2, mkfs.ext3, mkfs.xfs ...
檢測檔案系統
fsck.ext2, fsck.ext3, fsck.ext4, fsck.xfs .
檢視其屬性
dumpe2fs, tune2fs
mkfs.FSTYPE /dev/DEVICE
blkid /dev/DEVICE
mkfs -t FSTYPE /dev/DEVICE
ext系列:
Linux檔案系統管理:
VFS:
日志檔案系統:加速檔案檢測并修複的過程
ext3, ext4, xfs
非日志型檔案系統:ext2
非一緻性:
ext系列檔案系統:mke2fs
mke2fs [OPTION]... /dev/DEVICE
-t {ext2|ext3|ext4}:指明要建立的檔案系統類型
mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
-b {1024|2048|4096}:其上限由page frame決定
-L LABEL:指定要使用的卷标
-j: 相當于使用-t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 指明inode與位元組的比率;即,每多少位元組給建立一個inode;
-N #: 直接指明給此檔案系統建立多少個inode
-m #:指定預留白間的百分比;預設為5;
-O [^]FEATURE
UUID: 全局惟一辨別符
e2label:
檢視:e2label /dev/DEVICE
設定卷标:e2label /dev/DEVICE LABEL
tune2fs:檢視或修改ext系列檔案系統的某些屬性
檢視超級塊中的資料資訊:
tune2fs -l /dev/DEVICE
修改指定檔案系統的屬性:
-j: ext2 --> ext3
-L LABEL: 修改卷标;
-m #: 調整預留白間的百分比;
-O [^]FEATURE: 開啟或關閉某種特性
-o [^]mount_options: 開啟或關閉某種預設挂載選項
-o acl
-o ^acl
dumpe2fs指令:顯示ext系列檔案系統屬性資訊
dumpe2fs [-h] /dev/DEVICE
檔案系統檢測:
因程序意外中止或系統崩潰等原因導緻寫入操作非正常終止時,可能會導緻檔案損壞;此時,應該修改修複檔案系統;
注意:應該離線進行;
fsck:
-t FSTYPE
fsck -t FSTYPE = fsck.FSTYPE
-a:自動修複所有錯誤
-r: 互動式修複錯誤
ext系列檔案系統的專用工具:
e2fsck
-y: 對所有問題自動回複為yes;
-f: 即使檔案系統處于clean狀态,也要強制進行檢測;
Windows無法識别Linux上專用的檔案系統,是以,有儲存設備需要兩種系統之間交叉使用時,應該使用windows支援的檔案系統:
# mkfs -t vfat /dev/DEVICE
swap檔案系統:
Linux上交換空間必須使用獨立的磁盤分區;
fdisk /dev/DEVICE
t指令調整其ID為82;
建立交換分區檔案系統:mkswap指令
mkswap [-L LABEL] /dev/DEVICE
注意:在Linux系統上,所有的檔案系統必須通過根檔案系統的某個分支來通路;
根檔案系統:根關聯到的分區
有一定的要求:FHS
其餘所有的其它檔案系統如果想要被通路,都隻能夠通過“關聯”至根檔案系統上的某個目錄來實作;
這種操作即所謂的“挂載”,也即mount;相反動作,即解除安裝,指令為umount
挂載點:mount_point,即用于作為另一個檔案系統通路入口的目錄;
mount指令:
mount DEVICE MOUNT_POINT
挂載點
1、事先存在;
2、應該使用别的程序未使用的目錄;
3、挂載點下原有的檔案将被隐藏;
mount:将顯示目前系統已經挂載的所有檔案系統的相關資訊;
mount [OPTION]... [-t FSTYPE] [-o OPTION] [DEVICE] MOUNT_POINT
指令選項:
-r: 隻讀挂載
-w: read and write,讀寫挂載
-t FSTYPE: 被挂載的裝置上的檔案系統類型;可省略,此時mount會自動使用blkid指令來判斷之;
-L LABEL: 以卷标的方式指定要挂載的裝置,是以,此時DEVICE可省;
-U UUID:以UUID的方式指定要挂載的裝置,是以,此時DEVICE可省;
-a: 自動挂載所有的支援自動挂載的裝置(/etc/fstab檔案中定義的支援自動挂載的裝置);
-n: 預設情況下,裝置挂載與否的改變結果會被儲存于/etc/mtab中一份;-n選項用于變動時不更新此檔案
示例:
# mount -U dea669ee-e769-46d9-86a8-88925a10278b /data/mydata
-o OPTION,挂載選項:
async:異步寫入
sync:同步寫入,即使用同步I/O;
atime/noatime:檔案或目錄在被通路時是否更新其通路時間戳;
diratime/nodiratime:目錄在文中時是否更新其通路時間戳;
auto/noauto:裝置是否支援mount指令使用-a選項時自動挂載;
dev/nodev:此裝置上是否建立裝置檔案;
exec/noexec:是否允許執行此檔案系統上的程式檔案;
suid/nosuid:是否支援此裝置上的檔案上使用suid權限;
remount: 重新挂載;
acl: 支援使用facl;
# mount -o acl
# tune2fs -o acl /dev/DEVICE: 打開acl為預設挂載選項;
ro: 隻讀
rw: 讀寫
user/nouser: 是否允許普通挂載此檔案系統
所有挂載選項均未指明時,其預設為:
defaults
Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
另外一個使用技巧:
将某目錄綁定至指定目錄下,作為臨時通路入口;
mount --bind 源目錄 目标目錄
檢視所有已經挂載裝置的方法:
# mount
# cat /etc/mtab
# cat /proc/mounts
umount指令:
umount DEVICE
umount MOUNT_POINT
注意:正在被某程序通路的裝置是不可以被解除安裝的;檢視被什麼程序所占用:
# lsof MOUNT_POINT
# fuser -v MOUNT_POINT
# fuser -km MOUNT_POINT: 終止正通路挂載點的程序;
df指令:
df [OPTION]... [FILE]...
-l: 僅顯示本地檔案系統的相關系統;
-h: 機關換算;
-i: 顯示inode的使用情況而非磁盤塊的;
du指令:
用于評估檔案大小
-s: 統計整個目錄及内部所有檔案總體大小;
-h: human-readable
交換分區:
建立交換分區檔案系統:mkswap
free指令:檢視記憶體使用狀況
-m
-g
啟動交換分區:
swapon [OPTION] [DEVICE]
-a: 啟用/etc/fstab檔案中定義的所有交換分區
禁用交換分區:
swapoff DEVICE