Upload
kenny-chen
View
887
Download
1
Embed Size (px)
DESCRIPTION
Linux 檔案系統基本運作原理,LVM,Soft RAID,以及檔案系統應用。
Citation preview
Linux File System
© Netman <[email protected]>
First thing you'll remember today:
Everything is file,Everything is file,&&
file is everything!file is everything!
今天您還要記住另一件事:
當所學的技術不能轉換成金錢當所學的技術不能轉換成金錢的時候,那是白學了。 的時候,那是白學了。 因此,個人使用與企業應用的因此,個人使用與企業應用的差異是非常懸殊的!差異是非常懸殊的!
•Objectives
1. Linux 檔案系統種類2. Linux 檔案系統運作原理3. 硬碟與分割區4. Linux 檔案系統建置5. Logical Volume Manager (LVM)
6. Software RAID
7. 網路檔案系統
Question:
甚麼是檔案系統?
● 簡單來說,能夠存放檔案且更重要的是能從裡面找回檔案的系統。
● 檔案系統選擇考量要素:– 效能– 容量– 安全性– 擴充性– 通用性
Part 1 Linux 檔案系統種類
傳统(非日誌式)檔案系統■ ext2
已在 Linux 系統上運行非常長久一段時間,基於 inode 基礎 管理檔案。可輕鬆升級為 ext3
■ MS-DOS/VFAT.
由 Microsoft 設計專門運行在 Windows 及 DOS 系統上的 檔案系統。主要以 FAT (File Allocation Table) 來管理檔案
■ minix.
古老且精簡的檔案系統。目前比較常見在 RAM disk 或Floppy 媒體中使用
日誌式檔案系統
每一筆檔案變更都會被記錄在日誌中,然後才會進行真正的修改,修改後再更新記錄。
■ ext3
為 ext2 檔安系統的延伸,主要增加了日誌功能
■ ReiserFS 原本由 Hans Reiser 開發,採用資料庫方式來管理檔案,
以 Balanced Binary Tree 結構提供更高效能的資料存取。
■ XFS 原本為 SGI 系統使用的高效能日誌式檔案系統。具備快速復
原能力、高彈性、大容量等優點
■ NTFS 是微軟公司為 Windows NT 系統設計的檔案系統,及後也
應用在更新的 Windows 系統當中
日誌式檔案系統
Virtual Filesystem Switch•VFS 把不同的檔案系統對上層程式隱藏起來,以提供統一的檔案資料存取模式
•具體的檔案存取行為則交由系統核心程式負責
• 可以為不具備 Unix 屬性的檔案系統解決 類 Unix 系統的操作行為
Virtual Filesystem Switch
App1 App3App2
VFS
VFATReiserfsEXT3EXT2
Part 2Linux檔案系統運作原理
•Linux 檔案系統中,檔案的資料 (data)與資訊 (information)是分開存放的• 每份檔案的資訊會被記錄在 inode (index node)中
... ...
Inode block data block
• 每份 inode大小為 128 byte,內容:– 檔案類別– 檔案權限– 連結數目– 擁有者資訊 (user & group)– 檔案大小– 時間戳印 (atime, mtime, ctime)– Data Block 位置指針– 其他屬性 ...
•檔案系統在建立時(格式化),會劃分出基本的使用區塊空間 (block),然後再分配為不同的使用類型:
–Super Block
–Block Group Descriptor
–Block Bit Map
–Inode Bit Map
–Inode Table
–Data Block
• 在建立 block 的時候,一般可以指定不同的大小:
–數量的不同
–浪費程度的不同(參考下頁)
–效能的不同
• 因為 data block 的使用基本是獨佔式的(以一個 5K大小的檔案為例 ):
–4K 大小的 block 會浪費 3K
–2K 大小的 block 會浪費 1K
–1K 大小的 block 會浪費 0K
•由於現在的檔案系統體積非常龐大,為改 善索引效率,設計上會把 block 劃分為
block group:
group0 group1 Group2...
•每個 group的功能都是相同的
group0 group1 Group2...
SuperBlock
GroupDescriptor Data Block ...Block
Bit MapInodeTable
InodeBit Map
■ Data Block 檔案系統的主要資源,用來存放檔案資料(data)內容。在比例上所佔的數量最多。
Q: 怎麼知道一份檔案的資料放哪呢?
Data Block ...
■ Inode Table 存放每一份檔案的 inode 資訊。這也是檔
案系統中另一主要資源,若所有 inode 都分配出去就不能建立新檔案了。 Inode 會告
訴檔安的 data block 位置。
Q: 怎麼知道哪些 inode跟 block用掉了?
InodeTable
■ Inode Bit Map 以 0 或 1 的狀態對照 inode table 的分
配情況。
Q: 怎麼知道 Inode Bit Map 有多大呢?
InodeBit Map
■ Block Bit Map 以 0 或 1 的狀態對照 data block 的分配
情況。
Q: 怎麼知道 Block Bit Map 有多大呢?
BlockBit Map
■ Group Descriptor 記錄及標識 Bit Maps, Inode Table, Data Block
等區塊範圍及尋址指針。
Q: 怎麼知道整個檔案系統的分配及使用情形呢?
GroupDescriptor
■ Super Block記錄整個檔案系統分配與使用狀態:
–已被使用及可用的 inode與 block數量
–Block Group數量及每個群組的 inode與block數量
–檔案系統的使用記錄,如掛載、寫入時間等等
–其他更多關於整個檔案系統的資訊 ...
– 其中有個 valid bit 記錄系統掛載狀態( 0是已掛載、1是已卸載)
SuperBlock
•Question:
如何從一個檔案系統中找到一份檔案呢?
目錄的功能•目錄本身也是一份檔案•內容記錄其下所索引的每一份檔案名稱及
其 inode 號碼
. : 1234
.. : 4321
File1 : 1122
File2 : 2233
File3 : 3344
File4 : 5566
... : ...
•所有的檔案(含目錄本身)都是在目錄之下索引的,如此就構成了所謂的路徑:
–絕對路徑:從根目錄開始索引
–相對路徑:從當前目錄開始索引
。。。
。。。
。。。
Directory
File Name
Directory
Inode
DataBlock
關於 link•Hard Link : ln file hard.link
– 使用相同的 inode 索引,與原檔案地位同等
•Symbolic Link: ln -s file soft.link
– 使用不同的 inode ,但資料內容是路徑
File Name
Directory
Inode
Data
Symbolic LinkHard Link
InodeInode
Path
關於 Link Counter• 在 Hard Link 建立時增加 1• 在檔案刪除時減少 1
– 若 Link Counter 大於 0 則單純在Directory 中把檔案名稱移除
– 若 Link Counter 等於 0 除了從Directory 把檔案名稱移除之外,同時
把 inode & block Bit Map 中的記錄標 識為 0 (free)
Q: 敏感檔案如何才能真正刪除?
Ext2 檔案系統的限制•每一檔案名稱不得超過 255個字母•單一路徑 (含 /)不得超過 4096個字母•在 1K block size 的情況下,單一檔案最大 16G、整個檔案系統最大 2T
•在 4K block size 的情況下,單一檔案最大 2T、整個檔案系統最大 16T
Ext2 檔案系統的弱點•空間浪費嚴重(小檔案&零碎尾巴)•Inode 數量固定不能修改
– 過多會壓縮 Data Block 的空間– 過少容易到達極限,就算有閒置的
Data Block 也不能建立新檔案
•檔案數量過多時會導致效能下降
reiserfs 檔案系統• 使用 tailing block 減少空間浪費
•Inode 數量按需而建• 使用 Balanced Binary Tree 提高效能
檔案修改的行為• 每一次檔案修改會產生兩筆 transaction
–資料 (Data)修改
–資訊 (Inode)修改
• 若只完成其中一筆 transaction 則為檔案損毀 (curruption)情形
... ...
系統在重開機過程• 會檢查 Super Block 的 Valid Bit 以及掛載次數 /天數來確認檔案損毀情形并加以修復•傳統非日誌式檔案系統會針對每一份檔案作檢查,若檔案數量龐大的話這將耗費相當多的時間!•這在企業經營中常因斷電或其他意外造成
過大的 Down Time 成本
日誌式檔案系統•每一次檔案修改之前,會先在日誌中進行記錄,
待 transaction 完成之後再更新記錄•如此在下次開機的時候,只需檢查日誌中有登記的檔案即可。這大幅縮減了檔案系統的檢查時間
,為企業降低 Down Time 成本。•雖然日誌的記錄與更新會造成輕微的額外操作,但隨著硬體效能以及檔案系統的改良,對於檔案數量龐大的系統來說,還是值得的。
Part 3硬碟與分割區
Linux系統的硬碟名稱•IDE HDD/ATAPI CDROM
–1st IDE: hda, hdb
–2nd IDE: hdc, hdd
•SCSI HDD/SATA HDD/USB Disk–sda
–sdb
–sdc
–...
Linux系統的分割區名稱•IDE HDD/ATAPI CDROM
–hda1
–hda2
–hdc5
–...
•SCSI HDD/SATA HDD/USB Disk
–sda1
–sdb2
–sdc5
–...
分割區類別•Primary Partition
–最多 4個
– 號碼從 1 到 4,不需連號不需按順序
•Extended Partition– 從 Primary 轉換過來
– 最多只能 1 個也可以不設
•Logical Partition
– 只能在 Extended Partition 之內建立
– 必需連號(從 5 開始)
–但可以不按順序
4
Linux系統的分割範例•以 5個分割區為例:
1 25 6 7 8
1
16 7 8
31
95
Primary
25 6
Extended Logical
分割區考量因素•內容分類
–系統檔案
–程式/原始碼
–資料文件
•檔案性質差異–size
–存取行為
•安全性–掛載選項
•效能
•擴充性
最基本分割區•/ (root)•swap
常見獨立割區•/boot•/home•/opt•/tmp•/srv•/usr
•/var
Part 4Linux 檔案系統建置
檔案系統建置大致流程1. fdisk
2. partprobe
3. mkfs
4. mkdir
5. /etc/fstab
6. mount
fdisk 命令• 修改/建立 partition 的工具•常見參數:
-l : 列出分割區資訊•基本語法
fdisk /dev/<disk>
常見 fdisk 內部命令m
列出命令說明簡要
p
列出分割區資訊
n
建立分割區d
刪除分割區l
列出檔案系統識別碼t
修改檔案系統識別碼q
不作任何變更離開w
儲存變更并離開
• 請習慣 fdisk 命令的 Q& A 操作模式•例:
partprobe 命令• 當 fdisk 命令完成分割區修改之後,系統核心仍然使用舊有資訊
•要系統使用修改之後的新資訊,有兩個方法:
–reboot
–Partprobe
• 檢查 /proc/partitions 可獲知當前系統的分割區資訊
檔案系統格式化•在儲存設備上建立檔案系統• 在 linux 上使用 mkfs 命令 :
mkfs -t <type> [options] <device>
• 以 ext3 為例:mkfs.ext3
mkfs -t ext3
mke2fs -j
mkfs.ext2 -j
• 常見 mkfs 選項:-b <size>
•Block Size
-c
• 檢查 bad block
-i <ratio>
•Inode 對 byte 的比例
-N <number>
•Inode 總量(大約值)
-j
• 啟用 journal
-L <label>
•設定標簽
*更多參考 man mke2fs
檔案系統掛載•Linux 檔案系統跟 Windows 不同,并不使用磁碟代號
•所有儲存設備必需掛載 (mount)到一個目錄才能存取
•掛載目錄最好是空的 (empty),也稱為掛載點 (Mount Point)
•設備不使用時可以執行卸載 (umount)
檔案系統掛載
mount
mount 命令•命令語法:
mount -t <fs_type> -o <m_opts> <device> <mount_point>
•Example:mount -t iso9660 -o ro,nosuid /dev/sr0 /media/cdrom
常見掛載選項:rw/ro
•可否寫人
sync/async
•是否同步
dev/nodev
•是否可以存取設備
exec/noexec
•可否執行
suid/nosuid
•可否使用 suid轉換執行身份
掛載設定檔 fstab•路徑:
/etc/fstab
•欄位:<device>
•設備路徑或識別標記
<m_point>
•掛載點路徑
<fs_type>
•檔案系統類別
<m_options>
•掛載選項
<dump>
• 是否在 dump 時備份 (1或0)
<fsck>
• 是否在 fsck -a 時檢查 (0或1或2)
● fstab 專屬選項auto/noauto
• 是否在執行 mount -a 進行掛載
user/nouser
•是否允許非管理員掛載
defaults
•rw,sync,dev,exec,suid,auto,nouser
• 檔設備設定存在於 fstab 之後,可以簡化掛載命令:
mount <dev>
mount <m_point>
mount -a
umount 命令•命令語法:
umount <device>
umount <mount_point>
•條件該設備目前不能被使用中
Part 5Logical Volume Manager
(LVM)
問大家幾個問題:•當硬碟爆了怎辦?•分割硬碟時,有些分割區太大有些又太小怎調整?•硬碟槽插滿了,怎麼用更大的硬碟來替換?•公司生意太好了,沒幾年就要升級硬碟怎麼辦?•那些隨時在變更的資料都怎麼備份的?•...?
• 這些都不是重點 ...
我只問一個問題就夠了:
您打算要公司花多少
Down Time
成本在上面?!
LVM 的好處• 突破過往傳統 partition 的限制,輕易組建及擴充龐大的檔案系統空間
•輕鬆調整容量大小•在支援熱插拔的設備上,不需要停止服務就能替換硬碟
• 可利用 striping 提高更好的存取效能•可利用 shapshot為某一時間點作備份,
極致化壓縮 backup window 的大小
LVM 基本元件–Physical Volume
>ID 為 x8e 的 partition 或整顆設備
PV PVPVPV
–Volume Group> 把一個或多個 PV 組成共同的群組
PV PVPVPV
VG
–Physical Extent> 對 VG 重新劃分的空間單位(預設是4M)
PV PVPVPV
PE
–Logical Volume> 重新分配 PE 所組成的空間
PV PVPVPV
VGLV
LV
LV
– lvreduce 可以釋放 LV 中閒置未用的 PE
PV PVPVPV
VGLV
LVLV
LVM 之彈性
PV PVPVPV
VGLV
LVLV
– lvextend 可以把 VG 中游離可用的 PE 納 入 LV 以擴充容量
PV
–vgextend 可為 VG 在 PE 不足的時候加入 PV 進來 以擴充整個 VG 的容量
PV PVPVPV
VGLV
LVLV
PV
–pvmove 可以把 PV 中已使用的 PE 搬移到別的 PV 中
PV PVPVPV
VG
LV LV
LV
PV
–vgreduce 可以把閒置的 PV 從 VG 中開除
PV PVPVPV
VG
LV LV
LV
LVM 基本建置操作• 先執行 fdisk (設 ID 為 x8e) 及 partprobe• 運行 pvcreate:
pvcreate /dev/sd{a,b}1
• 運行 vgcreate:vgcreate myvg /dev/sd{a,b}1
• 運行 lvcreate:lvcreate -L 500M -n mylv myvg
• 新建的 lv 路徑在 /dev/<vg>/<lv>,如:/dev/myvg/mylv
• 再執行 mkfs, mkdir, mount 等操作
LVM 擴充操作• 先執行 fdisk (設 ID 為 x8e) 及 partprobe
• 運行 pvcreate 處理新分割區或新硬碟:pvcreate /dev/sdc1
• 運行 vgextend 把新 PV 納入 VG:vgextend myvg /dev/sdc1
• 運行 pvmove 把舊硬碟的 PE 搬移至新硬碟:pvmove /dev/sda1 /dev/sdc1
• 運行 vgreduce 卸下舊硬碟:vgreduce myvg /dev/sda1
• 運行 lvextend 擴充 LV:lvexted -l +100% /dev/myvg/mylv
• 運行 resize2fs 擴充檔案系統:resize2fs /dev/myvg/mylv
• 再執行 df 確認容量大小
LVM 其他操作• 關於 PV 的查詢:
pvscan
pvdisplay
• 關於 vg 的查詢:vgscan
vgdisplay
• 關於 lv 的查詢:lvscan
lvdisplay
• 停用或啟用 VGvgchange -a <n|y> <vg_name>
•結論:
能夠用 LVM 的話, 從現在開始就用 LVM 吧!
p.s. 我相信您日後會感謝我這個建議的 ...
巴特 ...
•LVM 也不是完美的:
LVM 本身不具備容錯能力。 換句話來說,如果某一個 PV 壞掉的話,
可能整個 VG 的資料都會損毀!
...那怎麼辦呢?
Part 6Software RAID
RAID 是蝦米碗糕?
•簡單來說,RAID就是用多個儲存設備組成的陣列。
RAID 的種類•Hardware RAID
–有獨立處理的硬體處理單元
– 所有 RAID 的運算由硬體完成
– 對系統來說,只視為單一的儲存設備,如 sda, sdb, …
–效能高、功能強,但成本也高
•Software RAID
– 在組成 RAID 之前,系統只看到獨立的儲存設備
– 組成 RAID 之後,系統以 md0, md1, … 等名稱來識別
– 所有的 RAID 運算由系統完成
–效能與功能稍遜,但勝在便宜
RAID 的等級•RAID0
– 也叫 striping
–至少需要兩顆硬碟
–可提升存取效能
–沒有容錯能力
5
3
1
6
4
2
•RAID1– 也叫 mirroring
–至少需要兩顆硬碟
–具容錯能力
–但不能提升效能
3
2
1
3
2
1
•RAID5–至少需要三顆硬碟
– 利用 parity 來提供容錯能力 (只容許一顆硬碟故障 )
–同時也能提升效能
– 與 RAID2,3,4 差在運算單位之外,也避免了parity disk 的瓶頸
p
3
1
5
p
2
6
4
p
•Parity 的原理:
stripA: 11001010
stripB: 11100011
Parity: 11010110
•Question:
如果 RAID5 同時有兩顆硬碟故障呢?
•RAID6 或更高等級•Spare Disk
–需要至少一顆閒置硬碟
–爭取最快的復原時間
p
3
1
5
p
2
6
4
p
5
p
2
RAID + LVM• 我們可以用 RAID 的容錯能力來解決LVM 不能容錯的問題
– 能用 Hardware RAID 是最好的
– 也可以用 Software RAID1
3
2
1
3
2
1
PV
3
2
1
3
2
1
PV
VG
Part 7Network File System
再問大家一個問題:
• 作為一個 MIS 資訊人員, 當 End User 回報系統故障的時候,
您首先想到的是甚麼?
菜鳥版 :
雪特!!千萬別在這個時候給我出槌啊~~~(皮皮挫 ing,抖。。。)
OK,我相信這不會是你啦 ...
資深版 :
按~~~!!林貝早就說過了啦!誰叫你又手賤了是不是啊?!!@$%#^%**)_@$$#@^&^*
Well, 我相信這絕對不是你的答案 ...
進階版 :
免驚啦~~有我在,馬上幫你修好!
Good, 我開始欣賞你了!
神級版 :
恩~~我得確保您的工作不會被中斷!
YES!! That is what I want to hear!
那接下來 ...
How to do?
Solution:
換系統而不是修系統!
網路檔案系統• 由 server 端輸出 (export)目錄• 然後 client 端透過網路掛載 (mount)
ExportMount
網路檔案系統方案•NFS•SAMBA•Koda•iSCSI•NAS•SANS•etc...
集中式管理
Many more...
–Quota–Backup/Rsync–Content Filtering–Regular Expression– ISO/RamDisk/VM Image– ...
額外參考資訊
– IBM developerWorks:>http://www-106.ibm.com/developerworks/library/l-fs.html
–Novell web site:>http://www.novell.com/products/linuxenterpriseserver/kernel_limits.html
–FHS:>http://www.pathname.com/fhs/
–ext2:>http://e2fsprogs.sureceforge.net/
–Reiserfs:>http://www.namesys.com
–XFS:>http://oss.sgi.com/projects/xfs/
Thank you!Thank you!
Please emember:
Everything is file,Everything is file,&&
file is everything!file is everything!