107
Linux File System © Netman <[email protected]>

Linux File system

Embed Size (px)

DESCRIPTION

Linux 檔案系統基本運作原理,LVM,Soft RAID,以及檔案系統應用。

Citation preview

Page 1: Linux File system

Linux File System

© Netman <[email protected]>

Page 2: Linux File system

First thing you'll remember today:

Everything is file,Everything is file,&&

file is everything!file is everything!

Page 3: Linux File system

今天您還要記住另一件事:

當所學的技術不能轉換成金錢當所學的技術不能轉換成金錢的時候,那是白學了。 的時候,那是白學了。 因此,個人使用與企業應用的因此,個人使用與企業應用的差異是非常懸殊的!差異是非常懸殊的!

Page 4: Linux File system

•Objectives

1. Linux 檔案系統種類2. Linux 檔案系統運作原理3. 硬碟與分割區4. Linux 檔案系統建置5. Logical Volume Manager (LVM)

6. Software RAID

7. 網路檔案系統

Page 5: Linux File system

Question:

甚麼是檔案系統?

Page 6: Linux File system

● 簡單來說,能夠存放檔案且更重要的是能從裡面找回檔案的系統。

● 檔案系統選擇考量要素:– 效能– 容量– 安全性– 擴充性– 通用性

Page 7: Linux File system

Part 1 Linux 檔案系統種類

Page 8: Linux File system

傳统(非日誌式)檔案系統■ ext2

已在 Linux 系統上運行非常長久一段時間,基於 inode 基礎 管理檔案。可輕鬆升級為 ext3

■ MS-DOS/VFAT.

由 Microsoft 設計專門運行在 Windows 及 DOS 系統上的 檔案系統。主要以 FAT (File Allocation Table) 來管理檔案

■ minix.

古老且精簡的檔案系統。目前比較常見在 RAM disk 或Floppy 媒體中使用

Page 9: Linux File system

日誌式檔案系統

每一筆檔案變更都會被記錄在日誌中,然後才會進行真正的修改,修改後再更新記錄。

Page 10: Linux File system

■ ext3

為 ext2 檔安系統的延伸,主要增加了日誌功能

■ ReiserFS 原本由 Hans Reiser 開發,採用資料庫方式來管理檔案,

以 Balanced Binary Tree 結構提供更高效能的資料存取。

■ XFS 原本為 SGI 系統使用的高效能日誌式檔案系統。具備快速復

原能力、高彈性、大容量等優點

■ NTFS 是微軟公司為 Windows NT 系統設計的檔案系統,及後也

應用在更新的 Windows 系統當中

日誌式檔案系統

Page 11: Linux File system

Virtual Filesystem Switch•VFS 把不同的檔案系統對上層程式隱藏起來,以提供統一的檔案資料存取模式

•具體的檔案存取行為則交由系統核心程式負責

• 可以為不具備 Unix 屬性的檔案系統解決 類 Unix 系統的操作行為

Page 12: Linux File system

Virtual Filesystem Switch

App1 App3App2

VFS

VFATReiserfsEXT3EXT2

Page 13: Linux File system

Part 2Linux檔案系統運作原理

Page 14: Linux File system

•Linux 檔案系統中,檔案的資料 (data)與資訊 (information)是分開存放的• 每份檔案的資訊會被記錄在 inode (index node)中

... ...

Inode block data block

Page 15: Linux File system

• 每份 inode大小為 128 byte,內容:– 檔案類別– 檔案權限– 連結數目– 擁有者資訊 (user & group)– 檔案大小– 時間戳印 (atime, mtime, ctime)– Data Block 位置指針– 其他屬性 ...

Page 16: Linux File system

•檔案系統在建立時(格式化),會劃分出基本的使用區塊空間 (block),然後再分配為不同的使用類型:

–Super Block

–Block Group Descriptor

–Block Bit Map

–Inode Bit Map

–Inode Table

–Data Block

Page 17: Linux File system

• 在建立 block 的時候,一般可以指定不同的大小:

–數量的不同

–浪費程度的不同(參考下頁)

–效能的不同

Page 18: Linux File system

• 因為 data block 的使用基本是獨佔式的(以一個 5K大小的檔案為例 ):

–4K 大小的 block 會浪費 3K

–2K 大小的 block 會浪費 1K

–1K 大小的 block 會浪費 0K

Page 19: Linux File system

•由於現在的檔案系統體積非常龐大,為改 善索引效率,設計上會把 block 劃分為

block group:

group0 group1 Group2...

Page 20: Linux File system

•每個 group的功能都是相同的

group0 group1 Group2...

SuperBlock

GroupDescriptor Data Block ...Block

Bit MapInodeTable

InodeBit Map

Page 21: Linux File system

■ Data Block 檔案系統的主要資源,用來存放檔案資料(data)內容。在比例上所佔的數量最多。

Q: 怎麼知道一份檔案的資料放哪呢?

Data Block ...

Page 22: Linux File system

■ Inode Table 存放每一份檔案的 inode 資訊。這也是檔

案系統中另一主要資源,若所有 inode 都分配出去就不能建立新檔案了。 Inode 會告

訴檔安的 data block 位置。

Q: 怎麼知道哪些 inode跟 block用掉了?

InodeTable

Page 23: Linux File system

■ Inode Bit Map 以 0 或 1 的狀態對照 inode table 的分

配情況。

Q: 怎麼知道 Inode Bit Map 有多大呢?

InodeBit Map

Page 24: Linux File system

■ Block Bit Map 以 0 或 1 的狀態對照 data block 的分配

情況。

Q: 怎麼知道 Block Bit Map 有多大呢?

BlockBit Map

Page 25: Linux File system

■ Group Descriptor 記錄及標識 Bit Maps, Inode Table, Data Block

等區塊範圍及尋址指針。

Q: 怎麼知道整個檔案系統的分配及使用情形呢?

GroupDescriptor

Page 26: Linux File system

■ Super Block記錄整個檔案系統分配與使用狀態:

–已被使用及可用的 inode與 block數量

–Block Group數量及每個群組的 inode與block數量

–檔案系統的使用記錄,如掛載、寫入時間等等

–其他更多關於整個檔案系統的資訊 ...

– 其中有個 valid bit 記錄系統掛載狀態( 0是已掛載、1是已卸載)

SuperBlock

Page 27: Linux File system

•Question:

如何從一個檔案系統中找到一份檔案呢?

Page 28: Linux File system

目錄的功能•目錄本身也是一份檔案•內容記錄其下所索引的每一份檔案名稱及

其 inode 號碼

. : 1234

.. : 4321

File1 : 1122

File2 : 2233

File3 : 3344

File4 : 5566

... : ...

Page 29: Linux File system

•所有的檔案(含目錄本身)都是在目錄之下索引的,如此就構成了所謂的路徑:

–絕對路徑:從根目錄開始索引

–相對路徑:從當前目錄開始索引

Page 30: Linux File system

。。。

。。。

。。。

Directory

File Name

Directory

Inode

DataBlock

Page 31: Linux File system

關於 link•Hard Link : ln file hard.link

– 使用相同的 inode 索引,與原檔案地位同等

•Symbolic Link: ln -s file soft.link

– 使用不同的 inode ,但資料內容是路徑

Page 32: Linux File system

File Name

Directory

Inode

Data

Symbolic LinkHard Link

InodeInode

Path

Page 33: Linux File system

關於 Link Counter• 在 Hard Link 建立時增加 1• 在檔案刪除時減少 1

– 若 Link Counter 大於 0 則單純在Directory 中把檔案名稱移除

– 若 Link Counter 等於 0 除了從Directory 把檔案名稱移除之外,同時

把 inode & block Bit Map 中的記錄標 識為 0 (free)

Q: 敏感檔案如何才能真正刪除?

Page 34: Linux File system

Ext2 檔案系統的限制•每一檔案名稱不得超過 255個字母•單一路徑 (含 /)不得超過 4096個字母•在 1K block size 的情況下,單一檔案最大 16G、整個檔案系統最大 2T

•在 4K block size 的情況下,單一檔案最大 2T、整個檔案系統最大 16T

Page 35: Linux File system

Ext2 檔案系統的弱點•空間浪費嚴重(小檔案&零碎尾巴)•Inode 數量固定不能修改

– 過多會壓縮 Data Block 的空間– 過少容易到達極限,就算有閒置的

Data Block 也不能建立新檔案

•檔案數量過多時會導致效能下降

Page 36: Linux File system

reiserfs 檔案系統• 使用 tailing block 減少空間浪費

•Inode 數量按需而建• 使用 Balanced Binary Tree 提高效能

Page 37: Linux File system

檔案修改的行為• 每一次檔案修改會產生兩筆 transaction

–資料 (Data)修改

–資訊 (Inode)修改

• 若只完成其中一筆 transaction 則為檔案損毀 (curruption)情形

... ...

Page 38: Linux File system

系統在重開機過程• 會檢查 Super Block 的 Valid Bit 以及掛載次數 /天數來確認檔案損毀情形并加以修復•傳統非日誌式檔案系統會針對每一份檔案作檢查,若檔案數量龐大的話這將耗費相當多的時間!•這在企業經營中常因斷電或其他意外造成

過大的 Down Time 成本

Page 39: Linux File system

日誌式檔案系統•每一次檔案修改之前,會先在日誌中進行記錄,

待 transaction 完成之後再更新記錄•如此在下次開機的時候,只需檢查日誌中有登記的檔案即可。這大幅縮減了檔案系統的檢查時間

,為企業降低 Down Time 成本。•雖然日誌的記錄與更新會造成輕微的額外操作,但隨著硬體效能以及檔案系統的改良,對於檔案數量龐大的系統來說,還是值得的。

Page 40: Linux File system

Part 3硬碟與分割區

Page 41: Linux File system

Linux系統的硬碟名稱•IDE HDD/ATAPI CDROM

–1st IDE: hda, hdb

–2nd IDE: hdc, hdd

•SCSI HDD/SATA HDD/USB Disk–sda

–sdb

–sdc

–...

Page 42: Linux File system

Linux系統的分割區名稱•IDE HDD/ATAPI CDROM

–hda1

–hda2

–hdc5

–...

•SCSI HDD/SATA HDD/USB Disk

–sda1

–sdb2

–sdc5

–...

Page 43: Linux File system

分割區類別•Primary Partition

–最多 4個

– 號碼從 1 到 4,不需連號不需按順序

•Extended Partition– 從 Primary 轉換過來

– 最多只能 1 個也可以不設

•Logical Partition

– 只能在 Extended Partition 之內建立

– 必需連號(從 5 開始)

–但可以不按順序

Page 44: Linux File system

4

Linux系統的分割範例•以 5個分割區為例:

1 25 6 7 8

1

16 7 8

31

95

Primary

25 6

Extended Logical

Page 45: Linux File system

分割區考量因素•內容分類

–系統檔案

–程式/原始碼

–資料文件

•檔案性質差異–size

–存取行為

•安全性–掛載選項

•效能

•擴充性

Page 46: Linux File system

最基本分割區•/ (root)•swap

Page 47: Linux File system

常見獨立割區•/boot•/home•/opt•/tmp•/srv•/usr

•/var

Page 48: Linux File system

Part 4Linux 檔案系統建置

Page 49: Linux File system

檔案系統建置大致流程1. fdisk

2. partprobe

3. mkfs

4. mkdir

5. /etc/fstab

6. mount

Page 50: Linux File system

fdisk 命令• 修改/建立 partition 的工具•常見參數:

-l : 列出分割區資訊•基本語法

fdisk /dev/<disk>

Page 51: Linux File system

常見 fdisk 內部命令m

列出命令說明簡要

p

列出分割區資訊

n

建立分割區d

刪除分割區l

列出檔案系統識別碼t

修改檔案系統識別碼q

不作任何變更離開w

儲存變更并離開

Page 52: Linux File system

• 請習慣 fdisk 命令的 Q& A 操作模式•例:

Page 53: Linux File system

partprobe 命令• 當 fdisk 命令完成分割區修改之後,系統核心仍然使用舊有資訊

•要系統使用修改之後的新資訊,有兩個方法:

–reboot

–Partprobe

• 檢查 /proc/partitions 可獲知當前系統的分割區資訊

Page 54: Linux File system

檔案系統格式化•在儲存設備上建立檔案系統• 在 linux 上使用 mkfs 命令 :

mkfs -t <type> [options] <device>

• 以 ext3 為例:mkfs.ext3

mkfs -t ext3

mke2fs -j

mkfs.ext2 -j

Page 55: Linux File system

• 常見 mkfs 選項:-b <size>

•Block Size

-c

• 檢查 bad block

-i <ratio>

•Inode 對 byte 的比例

-N <number>

•Inode 總量(大約值)

-j

• 啟用 journal

-L <label>

•設定標簽

*更多參考 man mke2fs

Page 56: Linux File system

檔案系統掛載•Linux 檔案系統跟 Windows 不同,并不使用磁碟代號

•所有儲存設備必需掛載 (mount)到一個目錄才能存取

•掛載目錄最好是空的 (empty),也稱為掛載點 (Mount Point)

•設備不使用時可以執行卸載 (umount)

Page 57: Linux File system

檔案系統掛載

mount

Page 58: Linux File system

mount 命令•命令語法:

mount -t <fs_type> -o <m_opts> <device> <mount_point>

•Example:mount -t iso9660 -o ro,nosuid /dev/sr0 /media/cdrom

Page 59: Linux File system

常見掛載選項:rw/ro

•可否寫人

sync/async

•是否同步

dev/nodev

•是否可以存取設備

exec/noexec

•可否執行

suid/nosuid

•可否使用 suid轉換執行身份

Page 60: Linux File system

掛載設定檔 fstab•路徑:

/etc/fstab

•欄位:<device>

•設備路徑或識別標記

<m_point>

•掛載點路徑

<fs_type>

•檔案系統類別

<m_options>

•掛載選項

<dump>

• 是否在 dump 時備份 (1或0)

<fsck>

• 是否在 fsck -a 時檢查 (0或1或2)

Page 61: Linux File system

● fstab 專屬選項auto/noauto

• 是否在執行 mount -a 進行掛載

user/nouser

•是否允許非管理員掛載

defaults

•rw,sync,dev,exec,suid,auto,nouser

Page 62: Linux File system

• 檔設備設定存在於 fstab 之後,可以簡化掛載命令:

mount <dev>

mount <m_point>

mount -a

Page 63: Linux File system

umount 命令•命令語法:

umount <device>

umount <mount_point>

•條件該設備目前不能被使用中

Page 64: Linux File system

Part 5Logical Volume Manager

(LVM)

Page 65: Linux File system

問大家幾個問題:•當硬碟爆了怎辦?•分割硬碟時,有些分割區太大有些又太小怎調整?•硬碟槽插滿了,怎麼用更大的硬碟來替換?•公司生意太好了,沒幾年就要升級硬碟怎麼辦?•那些隨時在變更的資料都怎麼備份的?•...?

• 這些都不是重點 ...

Page 66: Linux File system

我只問一個問題就夠了:

您打算要公司花多少

Down Time

成本在上面?!

Page 67: Linux File system

LVM 的好處• 突破過往傳統 partition 的限制,輕易組建及擴充龐大的檔案系統空間

•輕鬆調整容量大小•在支援熱插拔的設備上,不需要停止服務就能替換硬碟

• 可利用 striping 提高更好的存取效能•可利用 shapshot為某一時間點作備份,

極致化壓縮 backup window 的大小

Page 68: Linux File system

LVM 基本元件–Physical Volume

>ID 為 x8e 的 partition 或整顆設備

PV PVPVPV

Page 69: Linux File system

–Volume Group> 把一個或多個 PV 組成共同的群組

PV PVPVPV

VG

Page 70: Linux File system

–Physical Extent> 對 VG 重新劃分的空間單位(預設是4M)

PV PVPVPV

PE

Page 71: Linux File system

–Logical Volume> 重新分配 PE 所組成的空間

PV PVPVPV

VGLV

LV

LV

Page 72: Linux File system

– lvreduce 可以釋放 LV 中閒置未用的 PE

PV PVPVPV

VGLV

LVLV

LVM 之彈性

Page 73: Linux File system

PV PVPVPV

VGLV

LVLV

– lvextend 可以把 VG 中游離可用的 PE 納 入 LV 以擴充容量

Page 74: Linux File system

PV

–vgextend 可為 VG 在 PE 不足的時候加入 PV 進來 以擴充整個 VG 的容量

PV PVPVPV

VGLV

LVLV

Page 75: Linux File system

PV

–pvmove 可以把 PV 中已使用的 PE 搬移到別的 PV 中

PV PVPVPV

VG

LV LV

LV

Page 76: Linux File system

PV

–vgreduce 可以把閒置的 PV 從 VG 中開除

PV PVPVPV

VG

LV LV

LV

Page 77: Linux File system

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 等操作

Page 78: Linux File system

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 確認容量大小

Page 79: Linux File system

LVM 其他操作• 關於 PV 的查詢:

pvscan

pvdisplay

• 關於 vg 的查詢:vgscan

vgdisplay

• 關於 lv 的查詢:lvscan

lvdisplay

• 停用或啟用 VGvgchange -a <n|y> <vg_name>

Page 80: Linux File system

•結論:

能夠用 LVM 的話, 從現在開始就用 LVM 吧!

p.s. 我相信您日後會感謝我這個建議的 ...

Page 81: Linux File system

巴特 ...

Page 82: Linux File system

•LVM 也不是完美的:

LVM 本身不具備容錯能力。 換句話來說,如果某一個 PV 壞掉的話,

可能整個 VG 的資料都會損毀!

...那怎麼辦呢?

Page 83: Linux File system

Part 6Software RAID

Page 84: Linux File system

RAID 是蝦米碗糕?

•簡單來說,RAID就是用多個儲存設備組成的陣列。

Page 85: Linux File system

RAID 的種類•Hardware RAID

–有獨立處理的硬體處理單元

– 所有 RAID 的運算由硬體完成

– 對系統來說,只視為單一的儲存設備,如 sda, sdb, …

–效能高、功能強,但成本也高

•Software RAID

– 在組成 RAID 之前,系統只看到獨立的儲存設備

– 組成 RAID 之後,系統以 md0, md1, … 等名稱來識別

– 所有的 RAID 運算由系統完成

–效能與功能稍遜,但勝在便宜

Page 86: Linux File system

RAID 的等級•RAID0

– 也叫 striping

–至少需要兩顆硬碟

–可提升存取效能

–沒有容錯能力

5

3

1

6

4

2

Page 87: Linux File system

•RAID1– 也叫 mirroring

–至少需要兩顆硬碟

–具容錯能力

–但不能提升效能

3

2

1

3

2

1

Page 88: Linux File system

•RAID5–至少需要三顆硬碟

– 利用 parity 來提供容錯能力 (只容許一顆硬碟故障 )

–同時也能提升效能

– 與 RAID2,3,4 差在運算單位之外,也避免了parity disk 的瓶頸

p

3

1

5

p

2

6

4

p

Page 89: Linux File system

•Parity 的原理:

stripA: 11001010

stripB: 11100011

Parity: 11010110

Page 90: Linux File system

•Question:

如果 RAID5 同時有兩顆硬碟故障呢?

Page 91: Linux File system

•RAID6 或更高等級•Spare Disk

–需要至少一顆閒置硬碟

–爭取最快的復原時間

p

3

1

5

p

2

6

4

p

5

p

2

Page 92: Linux File system

RAID + LVM• 我們可以用 RAID 的容錯能力來解決LVM 不能容錯的問題

– 能用 Hardware RAID 是最好的

– 也可以用 Software RAID1

3

2

1

3

2

1

PV

3

2

1

3

2

1

PV

VG

Page 93: Linux File system

Part 7Network File System

Page 94: Linux File system

再問大家一個問題:

• 作為一個 MIS 資訊人員, 當 End User 回報系統故障的時候,

您首先想到的是甚麼?

Page 95: Linux File system

菜鳥版 :

雪特!!千萬別在這個時候給我出槌啊~~~(皮皮挫 ing,抖。。。)

OK,我相信這不會是你啦 ...

Page 96: Linux File system

資深版 :

按~~~!!林貝早就說過了啦!誰叫你又手賤了是不是啊?!!@$%#^%**)_@$$#@^&^*

Well, 我相信這絕對不是你的答案 ...

Page 97: Linux File system

進階版 :

免驚啦~~有我在,馬上幫你修好!

Good, 我開始欣賞你了!

Page 98: Linux File system

神級版 :

恩~~我得確保您的工作不會被中斷!

YES!! That is what I want to hear!

Page 99: Linux File system

那接下來 ...

How to do?

Page 100: Linux File system

Solution:

換系統而不是修系統!

Page 101: Linux File system

網路檔案系統• 由 server 端輸出 (export)目錄• 然後 client 端透過網路掛載 (mount)

ExportMount

Page 102: Linux File system

網路檔案系統方案•NFS•SAMBA•Koda•iSCSI•NAS•SANS•etc...

Page 103: Linux File system

集中式管理

Page 104: Linux File system

Many more...

–Quota–Backup/Rsync–Content Filtering–Regular Expression– ISO/RamDisk/VM Image– ...

Page 105: Linux File system

額外參考資訊

– 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/

Page 106: Linux File system

 

Thank you!Thank you!

Page 107: Linux File system

Please emember:

Everything is file,Everything is file,&&

file is everything!file is everything!