Linux File System 魏凡琮 (Jerry Wei)
Agenda Linux FileSystem Partition LVM RAID Q & A
FileSystem 什麼是 FileSystem? Disk File System.。 儲存和組織電腦檔案和資料的方法。 可以存放檔案及取回檔案的系統。 Everything is file, file is everything.
FileSystem 選擇FileSystem: 穩定性。 容量。 擴充性。 效能。
FileSystem FileSystem種類: 傳統(非日誌式)檔案系統。 ext2、ms-dos、VFAT....etc. 日誌式檔案系統。 ext3、ReiserFS、XFS...etc.
FileSystem 常見的FileSystem: ext2:Linux早期使用的檔案系統,基於inode來 管理檔案。 ext3:ext2 的強化版 ,增加了日誌功能,目前是 大部份Linux預設使用的檔案系統。 ext3:ext2 的強化版 ,增加了日誌功能,目前是 大部份Linux預設使用的檔案系統。
FileSystem 常見的FileSystem: xfs:原本是SGI系統所使用的檔案系統,特點是 處理大檔案速度快。 ReiserFS:Hans Reiser及其團隊所開發,使用了 B+-tree,特點是對小檔案的處理速度快。 zfs:由Sun所開發的檔案系統,128位元的檔案 系統,幾乎可達到無限容量大小的支援。
FileSystem VFS: Virtual FileSystem Switch. Kernel VFS Ext2、NTFS...etc Buffer cache Disk driver
FileSystem 檔案組成(ext2): 檔案(file) = 資料(data) + 資訊(metadata) 資料存放於data block。 資訊存放於inode。 inode data block
FileSystem inode: 128 bytes 儲存檔案的各項屬性(類別、權限、大小、修改 時間、data block位置...etc) 每個檔案都有其獨立的inode。
FileSystem block: Data Block Block Bit Map inode Table Block Group Descriptor inode Bit Map Super Block
FileSystem block: 建立block時可指定不同大小(format) 建立數量不同。 浪費程度不同。 效能不同。
FileSystem block: block佔用空間方式: Ex:File Size: 5k,Block Size:4k Data block Data block Data block Data block File File 不可用 Data block Data block
FileSystem block: Block group (index) group1 group2 group3 group4 Super Block Group Descriptor Block Bit Map Inode Bit Map Inode table Data block
FileSystem block: Data block: 用來存放檔案資料。佔用最多數量。 Q:如何知道檔案資料放那? Super Group Descriptor Block Bit Map Inode Bit Map Inode table Data block 用來存放檔案資料。佔用最多數量。 Q:如何知道檔案資料放那?
FileSystem block: Inode table: Super Block Group Descriptor Block Bit Map Inode Bit Map Inode table Data block 存放檔案的inode資訊,inode一旦滿了也一樣會無法儲存新檔案,inode會告知檔案所使用的data block 位置。 Q:如何知道那些inode和block用掉了?
FileSystem block: Inode bit map: 利用 0 或 1 的狀態來對照 inode map的分配狀況。 Super Block Group Descriptor Block Bit Map Inode Bit Map Inode table Data block 利用 0 或 1 的狀態來對照 inode map的分配狀況。 Q:如何知道inode bit map 有多大?
FileSystem block: Block bit map: 利用 0 或 1 的狀態來對照 data block的分配狀況。 Super Block Group Descriptor Block Bit Map Inode Bit Map Inode table Data block 利用 0 或 1 的狀態來對照 data block的分配狀況。 Q:如何知道block bit map 有多大?
FileSystem block: Group Descriptor: Super Block Group Descriptor Block Bit Map Inode Bit Map Inode table Data block 記錄及標示 bit map、inode table、data block 等區塊的範圍及指標。 Q:如何知道filesystem的分配及使用情形?
FileSystem block: Super block: 記錄整個filesystem分配及使用狀況。 Group Descriptor Block Bit Map Inode Bit Map Inode table Data block 記錄整個filesystem分配及使用狀況。 Q:如何從filesystem找到一份檔案?
FileSystem directory: 也是一份檔案。 記錄其下所索引的每一份檔案名稱及inode。 絕對路徑:從根目錄(/home/abc/def) 開始索引。 相對路徑:從當前目錄(./abc/def)開始索引。
FileSystem directory: Directory Filename Inode Data block
FileSystem link: Hard Link (不可跨filesystem、不可link目錄) 使用與原檔案相同的inode。 #ln [src-file] [link-file] Symbolic Link (Soft Link) 另外新增的inode,但資料內容是原檔案的路徑。 #ln -s [src-file] [linkfile]
FileSystem link: Directory HardLink Filename SoftLink Inode Inode Path Data block
FileSystem 開機磁碟檢查: 檢查super block來確認狀況是否需要修復。 非日誌式檔案系統會每個檔案都比對檢查。 (花費大量時間) 日誌式檔案系統會對日誌有記錄的檔案進行檢 查。(節省時間)
Q & A 休息一下
Partition 硬碟名稱: IDE HDD/ATAPI CDROM hda hdb . . . . . SCSI HDD/ SATA HDD/ USB DISK sda sdb . . . . .
Partition 分割區名稱: IDE HDD/ATAPI CDROM hda1 hda2 . . . . . SCSI HDD/ SATA HDD/ USB DISK sda1 sda2 . . . . .
Partition 分割區類別: Primary Partition 最多 4 個。 1-4,不需連號,不用照順序。 Extended Partition 從primary轉換過來。 最多一個。 Logical Partition 只能在Extended Partition內建立。 需連號(從5開始) 可以不用照順序。
Partition 分割區類別: Hard Disk P P E L L L L L
Partition 分割區類別: P Hard Disk P E L L L L L
Partition 分割區考量因素: 內容分類:系統檔案、程式/原始碼、資料文件。 檔案性質:size、存取行為。 安全性:掛載選項。 效能。 擴充性。
Partition 基本分割區: / (root) swap
Partition 常見分割區: /boot /home /usr /var /tmp
Partition 建立流程: fdisk partprobe mkfs mkdir mount /etc/fstab
Partition fdisk: 建立/修改partition #fdisk /dev/sdb m:參數說明。 q:不修改退出。 p:列出partition。 w:儲存後退出。 n:建立partition。 d:刪除partition。 l:列出partition type。 t:修改partition type。
Partition partprobe: 強制更新partition資訊。(reboot or partprobe) 當fdisk完後,kernel沒有reload partition info時使用。 #partprobe
Partition mkfs: 格式化。 mkfs、mkfs.ext2、mkfs.ext3 都可以。 #mkfs.ext3 /dev/sdb1 #mkfs.ext2 -j /dev/sdb1 #mkfs -t ext3 /dev/sdb1
Partition mkfs: -b:block size. -c:check block for bad block. -L:volum label.
Partition mount point: linux沒有磁碟代號(c:、d:)。 所有device都需要mount才可以使用。 不使用時可以umount。
Partition mount point: /usr / /dev/sda1 /var /home/kevin /dev/sdb1 /home/mark
Partition mount: 掛載device至mount point。 #mount /dev/cdrom /mnt/cdrom -t:filesystem type -r:ready only -w:read / write -o:async、atime、owner、rw、roex.....etc mount point的目錄需要先被建立(mkdir)。
Partition umount: 卸載mount point。 #umount /mnt/cdrom
Partition fstab: /etc/fstab (掛載設定檔)。 Device (device path、label) mount point Filesystem type mount option dump fsck
Partition fstab: mount option: auto / noauto:mount -a 時是否掛載。 user / nouser:是否允許非root掛載。 defaults:rw、suid、dev、exec、auto、nouser async(no acl support)。
Q & A 休息一下
LVM LVM: Logical Volume Manager (LVM2) 。 彈性管理硬碟大小。 mapping mode : linear、stripe、mirror。 snapshot。
LVM LVM: PV (physical volume) 。 VG (volume group) 。 PE (physical extent)。 LV (logical volume)。
LVM PV: Partition (8e) or整顆硬碟 。 ex : /dev/sda1、/dev/sdb2。 Physical volume Physical volume PV PV
LVM VG: 將一個或多個PV組成群組。 Volume Group Physical volume Physical volume
LVM PE: 重新劃分VG空間的單位。(類似block的概念) Default : 4M Volume Group Physical volume Physical volume PE PE PE PE PE PE PE PE PE PE
LVM LV: 由VG切出的partition (PE所組成的空間)。 可掛載。 Volume Group Physical volume Logical Volume /home /usr /var
LVM lvreduce: 釋放LV中未使用的PE。 減少LV的空間。
LVM lvextend: 將未使用的PE加入LV中。 擴大LV的空間。
LVM vgextend: 將PV加入到VG中 (PE增加)。 擴大VG的空間。
LVM vgreduce: 將PV從VG中移除 (PE減少)。 減少VG的空間。
LVM LVM基本建置: fdisk /dev/sdb (8e) pvcreate /dev/sdb1 (pvs、pvscan、pvdisplay) vgcreate VG1 /dev/sdb1 (vgs、vgscan、vgdisplay) lvcreate -L 300M -n LV1 VG1 (lvs、lvscan、lvdisplay) mkfs.ext3 /dev/VG1/LV1 mkdir /mnt/myLV1 mount /dev/VG1/LV1 /mnt/myLV1
LVM LVM基本建置: fdisk /dev/sdb (8e) pvcreate /dev/sdb1 (pvs、pvscan、pvdisplay) vgcreate VG1 /dev/sdb1 (vgs、vgscan、vgdisplay) lvcreate -L 300M -n LV1 VG1 (lvs、lvscan、lvdisplay) mkfs.ext3 /dev/VG1/LV1 mkdir /mnt/myLV1 mount /dev/VG1/LV1 /mnt/myLV1
LVM LVM擴充空間: fdisk /dev/sdc (8e) pvcreate /dev/sdc1 vgextend VG1 /dev/sdc1 lvextend -L 600M /dev/VG1/LV1 e2fsck -f /dev/VG1/LV1 resize2fs /dev/VG1/LV1
LVM 建立snapshot: 建立一個時間點的快照。 lvcreate -L 100M -s -n S1 /dev/VG1/LV1 mkdir /mnt/LV1-snapshot mount /dev/VG1/S1 /mnt/LV1-snapshot umount /mnt/LV1-snapshot lvremove /dev/VG1/LV1
Q & A 休息一下
RAID RAID: 磁碟陣列。 將多顆硬碟組合成一顆。 Hardware RAID。 Software RAID。 Host RAID。
RAID Hardware RAID: 有獨立處理的硬體。(raid card) 所有RAID運算由硬體完成。 對系統來說,直接視為一個device (/dev/sda) 效能高,成本高。
RAID Software RAID: 在組成RAID前,各device 為獨立的。(sda、sdb) 組成後RAID後,系統以md0、md1辨視(mdadm) 吃系統本身資源來進行RAID運算。 效能差、成本低。
RAID Host RAID: 介於Hardware RAID與Software RAID之間。 可以想成是主機內建的RAID功能。 功能較陽春。 效能比Software RAID來的稍好。
RAID RAID0: striping。 至少2 顆硬碟。 存取速度最快。 沒有容錯能力。 總容量= 所有硬碟總和。
RAID RAID1: mirror。 至少2顆硬碟。 效能與原本差不多。 具有容錯能力。 總容量= 所有硬碟容量的一半 。
RAID RAID5: 至少3顆硬碟。 可容錯1顆硬碟壞掉。 效能較RAID1高。 總容量= (硬碟數量-1) * 硬碟容量。
RAID Hot spare: 需至少1顆閒置硬碟。 當有硬碟壞掉時,可最快時間替代並開始rebuild。 RAID rebuild過程中,效能會大幅下降。
RAID RAID1+0: RAID10 RAID1 + RAID0 RAID01 RAID0 + RAID1
RAID mdadm: multi device administers. (Linux) Software RAID or multipath. RAID0、RAID1、RAID5、RAID6.....etc. /dev/md0、/dev/md1、/dev/md2 ......
RAID mdadm: --create --create /dev/md0 --raid-device --raid-device=2 --level --level=1 or --level=mirror --spare-device --spare-device=1 (raid0不適用) --detail --deltail /dev/md0 (--scan) /etc/mdadm/mdadm.conf
RAID mdadm: --manage --stop /dev/md0 --add /dev/sdd --fail /dev/sdb --remove /dev/sdb --assmeble --run /dev/md0 /etc/mdadm/mdadm.conf
RAID 基本操作: 建立/dev/md0 (raid1 ) #mdadm --create /dev/md0 --raid-device=2 \ > --level=1 --spare-devices=0 \ > /dev/sdb /dev/sdc mkfs.ext3 /dev/md0 mkdir /mnt/raid-test mount /dev/md0 /mnt/raild-test mdadm --detail --scan >> /etc/mdadm/mdadm.conf
RAID 基本操作: 加入device #mdadm --manage /dev/md0 --add /dev/sdd 設定failure device #mdadm --manage /dev/md0 --fail /dev/sdc 移除 device #mdadm --manage /dev/md0 --remove /dev/sdc
Q & A