在格式化硬碟時,該選擇那一個?
ext4 可能有舊系統不支援。ext2 和 ext3 該選那一個好,使用日誌會不會讓存取效率變低?
最後我選擇的是 ntfs 格式,反正在 linux 上可以存取,硬碟拿到 MAC 和 Windows 也都能讀。
我的古老播放機的 linux 是 BusyBox v1.1.3 (2010.09.24-07:11+0000) Built-in shell (ash)
使用 mkfs.ext2 去格式化硬碟會顯示錯誤:
mkfs.ext2 -b 4096 -T ext2 /dev/sda1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122068992 inodes, 488275585 blocks
24413779 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
14901 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
mkfs.ext2: Could not allocate block in ext2 filesystem while trying to allocate filesystem tables
改用 ext3 就過了。
mkfs.ext3 -b 4096 -T ext3 /dev/sda1 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 122068992 inodes, 488275585 blocks 24413779 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 14901 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Writing inode tables: 623/14901
突然想了解一下
Linux kernel 自 2.6.28 開始正式支持新的檔案系統 Ext4。
ext3 與 ext4 比較
Ext4修改了 Ext3 中部分重要的資料結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能:
- 1. 與 Ext3 相容。 執行若干條命令,就能從 Ext3 線上遷移到 Ext4,而無須重新格式化磁片或重新安裝系統。原有 Ext3 資料結構照樣保留,Ext4 作用於新資料,當然,整個檔案系統因此也就獲得了 Ext4 所支援的更大容量。
- 2. 更大的檔案系統和更大的文件。 較之 Ext3 目前所支持的最大 16TB 檔案系統和最大 2TB 檔,Ext4 分別支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的檔案系統,以及 16TB 的檔。
- 3. 無限數量的子目錄。 Ext3 目前只支持 32,000 個子目錄,而 Ext4 支持無限數量的子目錄。
- 4. Extents。 Ext3 採用間接塊映射,當操作大檔時,效率極其低下。比如一個 100MB 大小的檔,在 Ext3 中要建立 25,600 個資料塊(每個資料塊大小為 4KB)的映射表。而 Ext4 引入了現代檔案系統中流行的 extents 概念,每個 extent 為一組連續的資料塊,上述檔則表示為“該檔資料保存在接下來的 25,600 個資料塊中”,提高了不少效率。
- 5. 多塊分配。 當寫入資料到 Ext3 檔案系統中時,Ext3 的資料塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 檔就要調用 25,600 次資料塊分配器,而 Ext4 的多塊分配器“multiblock allocator”(mballoc) 支持一次調用分配多個資料塊。
- 6. 延遲分配。 Ext3 的資料塊分配策略是儘快分配,而 Ext4 和其它現代檔作業系統的策略是盡可能地延遲分配,直到檔在 cache 中寫完才開始分配資料塊並寫入磁片,這樣就能優化整個檔的資料塊分配,與前兩種特性搭配起來可以顯著提升性能。
- 7. 快速 fsck。 以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 Ext4 給每個組的 inode 表中都添加了一份未使用 inode 的列表,今後 fsck Ext4 檔案系統就可以跳過它們而只去檢查那些在用的 inode 了。
- 8. 日誌校驗。 日誌是最常用的部分,也極易導致磁片硬體故障,而從損壞的日誌中恢復資料會導致更多的資料損壞。Ext4 的日誌校驗功能可以很方便地判斷日誌資料是否損壞,而且它將 Ext3 的兩階段日誌機制合併成一個階段,在增加安全性的同時提高了性能。
- 9. “無日誌”(No Journaling)模式。 日誌總歸有一些開銷,Ext4 允許關閉日誌,以便某些有特殊需求的使用者可以借此提升性能。
- 10. 線上磁碟重組。 儘管延遲分配、多塊分配和 extents 能有效減少檔案系統碎片,但碎片還是不可避免會產生。Ext4 支援線上磁碟重組,並將提供 e4defrag 工具進行個別檔或整個檔案系統的磁碟重組。
- 11. inode 相關特性。 Ext4 支持更大的 inode,較之 Ext3 默認的 inode 大小 128 位元組,Ext4 為了在 inode 中容納更多的擴展屬性(如納秒時間戳記或 inode 版本),默認 inode 大小為 256 位元組。Ext4 還支援快速擴展屬性(fast extended attributes)和 inode 保留(inodes reservation)。
- 12. 持久預分配(Persistent preallocation)。 P2P 軟體為了保證下載檔案有足夠的空間存放,常常會預先創建一個與所下載檔案大小相同的空檔,以免未來的數小時或數天之內磁碟空間不足導致下載失敗。 Ext4 在檔案系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟體自己實現更有效率。
- 13. 預計啟用 barrier。 磁片上配有內部緩存,以便重新調整批量資料的寫操作順序,優化寫入性能,因此檔案系統必須在日誌資料寫入磁片之後才能寫 commit 記錄,若 commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響資料完整性。Ext4 默認啟用 barrier,只有當 barrier 之前的資料全部寫入磁片,才能寫 barrier 之後的資料。(可通過 “mount -o barrier=0” 命令禁用該特性)
ext2 與 ext3 比較
Linux ext2/ext3檔案系統使用索引節點來記錄檔資訊,作用像windows的檔案配置表。索引節點是一個結構,它包含了一個檔的長度、創建及修改時 間、許可權、所屬關係、磁片中的位置等資訊。一個檔案系統維護了一個索引節點的陣列,每個檔或目錄都與索引節點陣列中的唯一一個元素對應。系統給每個索引 節點分配了一個號碼,也就是該節點在陣列中的索引號,稱為索引節點號。 linux檔案系統將檔索引節點號和檔案名同時保存在目錄中。所以,目錄只是將檔的名稱和它的索引節點號結合在一起的一張表,目錄中每一對檔案名稱和 索引節點號稱為一個連接。 對於一個檔來說有唯一的索引節點號與之對應,對於一個索引節點號,卻可以有多個檔案名與之對應。因此,在磁片上的同一個檔可以通過不同的路徑去訪問 它。
Linux 之前預設情況下使用的檔案系統為Ext2,ext2檔案系統的確高效穩定。但是,隨著Linux系統在關鍵業務中的應用,Linux檔案系統的弱點也漸漸 顯露出來了:其中系統預設使用的ext2檔案系統是非日誌檔案系統。這在關鍵行業的應用是一個致命的弱點。本文向各位介紹Linux下使用ext3日誌文 件系統應用。
Ext3檔案系統是直接從Ext2檔案系統發展而來,目前ext3檔案系統已經非常穩定可靠。它完全相容ext2檔案系統。使用者可以平滑地過渡到一個日誌功能健全的檔案系統中來。這實際上了也是ext3日誌檔案系統初始設計的初衷。
Ext3日誌檔案系統的特點
- 1、高可用性:系統使用了ext3檔案系統後,即使在非正常關機後,系統也不需要檢查檔案系統。宕機發生後,恢復ext3檔案系統的時間只要數十秒鐘。
- 2、資料的完整性:ext3 檔案系統能夠極大地提高檔案系統的完整性,避免了意外宕機對檔案系統的破壞。在保證資料完整性方面,ext3檔案系統有2種模式可供選擇。其中之一就是 “同時保持檔案系統及資料的一致性”模式。採用這種方式,你永遠不再會看到由於非正常關機而存儲在磁片上的垃圾檔。
- 3、檔案系統的速度:儘管使用ext3檔案系統時,有時在存儲資料時可能要多次寫資料,但是,從總體上看來,ext3比ext2的性能還要好一些。這是因為ext3的日誌功能對磁片的驅動器讀寫頭進行了優化。所以,檔案系統的讀寫性能較之Ext2檔案系統並來說,性能並沒有降低。
- 4、資料轉換:由 ext2檔案系統轉換成ext3檔案系統非常容易,只要簡單地鍵入兩條命令即可完成整個轉換過程,用戶不用花時間備份、恢復、格式化分區等。用一個 ext3檔案系統提供的小工具tune2fs,它可以將ext2檔案系統輕鬆轉換為ext3日誌檔案系統。另外,ext3檔案系統可以不經任何更改,而直接載入成為ext2檔案系統。
- 5、多種日誌模式:Ext3 有多種日誌模式,一種工作模式是對所有的檔資料及metadata(定義檔案系統中資料的資料,即資料的資料)進行日誌記錄(data=journal 模式);另一種工作模式則是只對metadata記錄日誌,而不對資料進行日誌記錄,也即所謂data=ordered或者data=writeback 模式。系統管理人員可以根據系統的實際工作要求,在系統的工作速度與檔資料的一致性之間作出選擇。
附註:Ext4 的各方面性能都超過了上一代 Ext3,甚至在大多數情況下,Ext4比沒有日誌功能的 Ext2 還要快出不少。
http://linux.vbird.org/linux_basic/1010appendix_B.php
EXT2 / EXT3 檔案系統
第二延伸檔案系統 (EXT2)
全文出處: http://www.freeos.com/articles/3912/
自從我們開始使用電腦後,大多數的使用者都曾經使用過檔案,而我們總是對關於硬碟如何正確地儲存檔案感到好奇, 它看起來似乎非常抽象,所以今天讓我們看一看 Linux 作業系統中較新的檔案系統版本『第二延伸系統( ext2 )』 ,並了解它各方面之用途。這個檔案系統是主要來自於 Andrew Tanenbaum 所寫的 Minix 檔案系統,它也是唯一可用在免費作業系統的檔案系統,稱之為 Minix。它後來修正為 Linux 所慣用的檔案系統並稱為延伸檔案系統,到現在 Linux 的檔案系統稱為 ext2 (第二延伸檔案系統),它是延伸檔案系統中較新的版本並支援存取控制列(ACL)。但是在著手研究 ext2 檔案系統之前,讓我們先了解檔案系統中之專有名詞的關聯。
Ext2fs公用程式 現在讓我們來看看一些標準Linux版本之ext2fsprogs公用程式:
在Linux檔案系統中最新的版本被稱為ext3,並已有 Journaling 之支援。Journaling 檔案系統對於所有已完成的步驟,持有記錄以及檢查點,所以假使系統當機時,它可以從最後的檢查點來還原檔案系統。 |
為何選擇 EXT3 呢
全文出處: http://www.linuxplanet.com/linuxplanet/reports/3726/1/
Red Hat決定在7.2版中使用 ext3 的格式來作為預設的檔案系統在,引起相當多熟悉 Linux 使用者的關注,但 ext3 並不是唯一的,也不是眾多日誌式 (journaling)檔案系統中最佳的。傳統的 Linux 檔案系統 ext2,對於在相當小容量的硬碟上之小檔案而言是相當的理想。隨著硬碟的容量及檔案大小大幅增加, 整體性能會下滑。有些原因是來自讀取未有效利用的磁碟空間,有些原因是來自不正常關機或是電源中斷檔案系統的恢復時間。 檔案系統經由 e2fsck 在一個 1GB 的硬碟做檢查是毫不費力的,但相同的測試在 40GB 的硬碟上可能會相當的秏費時間。 所以就有日誌式檔案系統的誕生。這些記錄硬碟狀態的檔案稱為日誌。 所以在不正確關機之後重新啟動需要參考到日誌檔案來重新回復檔案系統的狀態, 而非將整個硬碟做掃描。 同時, 日誌式檔案系統可以有更高的硬碟空間使用效率及使資料在各種不同之檔案大小中能夠快速的讀取及寫入。Linux並不是只有一個日誌式的檔案系統,它有四個,或是說成三又二分之一個:
Red Hat 是第一個採用 ext3 的公司,它嘗試性的將 Linux 檔案系統推向日誌式檔案系統。當公司計畫在 7.2 版的第二個測試版本採用 ext3 時,公司中首席核心開發者Michael K. Johnson便迅速的提供一個原理的闡述: ”為什麼你想要從 ext2 轉換到 ext3 呢?有四個主要的理由: 可利用性、資料完整性、速度及易於轉換”。可利用性,他指出,這意味著從系統中止到快速重新復原而不是持續的讓 e2fsc k執行長時間的修復。ext3 的日誌式條件可以避免資料毀損的可能。他也指出”除了寫入若干資料超過一次時, ext3 往往會較快於 ext2,因為 ext3 的日誌使硬碟讀取頭的移動能更有效的進行“。 然而或許決定的因素還是在Johnson先生的第四個理由中: “它是可以輕易的從 ext2 變更到 ext3 來獲得一個強而有力的日誌式檔案系統而不需要重新做格式化” 他說道。”那是正確的,為了體驗一下 ext3 的好處是不需要去做一種長時間的, 冗長乏味的且易於產生錯誤的備份工作及重新格式化的動作”。 |
格式化
用系統管理員帳戶 (即 root) 身份打「mkfs -t ext2|ext3|ext4 儲存裝置
」:
mkfs -t ext3 /dev/sdb5
要格式化檔案系統為 Ext2,亦可以直接使用命令 mkfs.ext2 或 mke2fs,例如:
mkfs.ext2 /dev/sdb5
或者:
mke2fs /dev/sdb5
要格式化檔案系統為 Ext3,亦可以使用命令 mkfs.ext3 或 mke2fs -j,例如:
mkfs.ext3 /dev/sdb5
或者:
mke2fs -j /dev/sdb5
Linux 在 2.6.28 開始正式鼓勵使用 Ext4。要格式化檔案系統為 Ext4,亦可以使用命令 mkfs.ext4 或 mke2fs -T ext4,例如:
mkfs.ext4 /dev/sdb5
或者:
mke2fs -T ext4 /dev/sdb5
mkfs.ext2、mkfs.ext3、mkfs.ext4 和 mke2fs 一般收錄在套件 e2fsprogs 中。
格式化選項
區塊大小 (Block size)
區塊 (block) 是檔案系統儲存檔案內容最小的單位,其大小對檔案系統的空間運用和效用有很大的影響。較的大區塊可以的令檔案系統大小上限和檔案大小上限增加,亦可以加快了大檔案的讀寫。然而亦會浪費較多的空間,對平均檔案大小較小的檔案系統比較不利。區塊大小隻可以在格式化檔案系統時設定,往後除重新格式化外不能改變。
Ext2/Ext3/Ext4 的區塊大小可以是 1024、2048 或 4096 位元組。 (Compaq Alpha 可以使用 8192 位元組區塊) mke2fs 一般預設會把小於 512 MiB 的檔案系統使用 1024 位元組區塊格式化,等於或大於 512 MiB 的檔案系統使用 4096 位元組區塊。(實際是視乎 mke2fs.conf 中檔案系統類型 small 和 default 的設定 blocksize)
您可以使用 mke2fs/mkfs 的選項 -b block-size
指定格式化後檔案系統的區塊大小,例如:
mkfs -t ext3 -b 4096 /dev/sdb5
-T
可以根據檔案系統類型 (fs-type) 決定區塊大小和其他選項,例如使用檔案系統類型 news 的設定格式化檔案系統,可以使用:
mkfs.ext3 -T floppy /dev/fd0
Inode 數目
Ext2/Ext3 檔案系統的 inode 數目限制了整個檔案系統可能最多擁有的檔案數目,而這數目在格式化檔案系統時已決定,往後除重新格式化外不能改變。 。一些儲存了大量小檔案的檔案系統 (例如 USENET 新聞組伺服器) 有機會出現用盡 inode 但仍餘下大量硬碟空間的情況。所以安裝這類伺服器時,檔案系統有機會需要特別設定。
mke2fs 預設會根據檔案系統的大小來決定 inode 的數目,小於或等於 512 MiB 的檔系統會每 4kiB 有一個 inode,512 MiB 以上的檔案系統則每 8kiB 有一個 inode。[1](實際是視乎 mke2fs.conf 中檔案系統類型 small 和 default 的設定 inode_ratio)
要直接設定 inode 數目可以使用 mke2fs/mkfs.ext2/mkfs.ext3/mkfs 的選項 -N no-of-node
,例如:
mke2fs -N 1000000 /dev/sdb5
mke2fs/mkfs.ext2/mkfs.ext3/mkfs 的選項 -i byte-per-inode
根據檔案系統的大小來決定 inode 的數目,例如要檔案系統每 512 KiB 就有一個 inode,可以使用:
mke2fs -i 524288 /dev/sdb5
mke2fs/mkfs 的選項 -T
可以根據檔案系統類型 (fs-type) 決定 inode 數目和其他選項,例如使用檔案系統類型 news 的設定格式化檔案系統,可以使用:
mkfs.ext3 -T news /dev/sdb5
Inode 大小 (inode size)
現時 inode 的大小預設為 256 位元組,早期的 inode 只有 128 位元組。較大的 inode 令檔案系統較易擴充支援 POSIX ACL 和擴充屬性 (Extended Attrible) 等功能。inode 大小同樣在格式化後不能改變。
您可以加上 -I inode-size
指定 inode 大小:
mkfs.ext3 -I 128 /dev/sdb5
保留空間
Ext2/Ext3 預設保留 5% 硬碟空間供系統管理員工作之用。設定保留空間大小可以使用 mke2fs/mkfs.ext2/mkfs.ext3/mkfs 的選項 -m percentage
,例如要檔案系統保留 12% 的空間,可以使用:
mkfs.ext2 -m 12 /dev/sdb5
格式化後仍可以使用命令 tune2fs -m 或 tune2fs -r 改變。
偵察壞區塊 (Bad block)
格式化時加上選項 -c
,mke2fs 會掃描整個儲存裝置是否有壞區塊 (bad block),例如:
mkfs -t ext3 -c /dev/sdb6
如果使用選項 -cc
,mke2fs 會寫一些資料入儲存裝置每個區塊並再讀取來測試壞區塊 – 比原本只讀更準確和但更慢的方法偵察壞區塊,例如:
mkfs.ext2 -cc /dev/sdc1
日誌大小 (Journal size)
格式化 ext3 或 ext4 時,mke2fs 會自動根據檔案系統的大小劃分日誌 (journal) 的大小[2]:
- 少於 32,768 個區塊則劃分 1024 個區塊作日誌
- 少於 262,144 個區塊但大於或等於 32,768 個區塊則劃分 4096 個區塊作日誌
- 大於或等於 262,144 個區塊則劃分 8192 個區塊作日誌
您可以加上 -J size=日誌大小
指定建立的日誌大小,單位為 MiB,例如:
mke2fs -J size=128 /dev/sdb1
格式化了 sdb1 為 ext3 並劃分 128 MiB 的日誌。(使用選項 -J 已穩示啟用日誌功能,所以可以略去選項 -j) 留意日誌的大小隻可以為 1024 至 102,400 個區塊。
William von Hagen[2]認為 mke2fs 自動劃分的日誌大小一般應該很適合,而無需要自訂。日誌過小會令其容易被寫滿,有機會減低檔案系統效率。較大的日誌對啟用 journaling 模式可能有幫助。但如果日誌大於電腦實體記憶體大小,開機修復檔案系統時有機會不夠記憶體載入整個日誌紀錄,不能自動修復。
如果有多於一顆硬碟,可以考慮使用外部日誌 (external journal) 把檔案系統和日誌儲存在不同的硬碟,可以增加效能。
檔案系統類型 (fs-type)
e2fsprog 1.39 之前中的 mkfs.ext2/mkfs.ext3/mke2fs 只支援 news 、 largefile 和 largefile4 三個檔案系統類型。e2fsprog 1.39 開始, mkfs.ext2/mkfs.ext3/mke2fs 使用設定檔案 mke2fs.conf 自訂檔案系統類型。[3] 現時一般 GNU/Linux 預設的檔案系統類型包括:
- small – 區塊大小 1 KiB,每 4 KiB 一個 inode,inode 大小 128 位元組
- floppy – 區塊大小 1 KiB,每 8 KiB 一個 inode,inode 大小 128 位元組
- news – 每 4 KiB 一個 inode
- largefile – 每 1 MiB 一個 inode
e2fsprogs 預設的 mke2fs.conf 額外定義了 [4]:
- largefile4 – 每 4 MiB 一個 inode
- hurd – 區塊大小 4 KiB,inode 大小 128 位元組
- ext3 – 開啟了 has_journal 功能
- ext4 – inode 大小 256 位元組,開啟了 has_journal、extents、huge_file、flex_bg、uninit_bg、dir_nlink 和 extra_isize 功能
檔案系統標簽 (Filesystem label)
檔案系統標簽 (Filesystem label) 在個別檔案系統又叫作 Volume Name,是檔案系統中一個小欄目用作簡述該檔案系統的用途或其儲存數據。現時 GNU/Linux 都會用 USB 手指/IEEE1394 硬碟等可移除儲存裝置的檔案系統標簽作為其掛載目錄的名稱,方便使用者識別。而個別 GNU/Linux distribution 如 Fedora、RHEL 和 CentOS 等亦在 /etc/fstab 取代傳統裝置檔案名稱 (即 /dev/sda1 和 /dev/hdc5 等) 的指定開機時要掛載的檔案系統,避免偶然因為 BIOS 設定或插入次序的改變而引起的混亂。您可以使用選項 -L 標簽
在格式化時設定檔案系統標簽:
mkfs.ext2 -L Photos /dev/sdc1
Ext2/Ext3/Ext4 的檔案系統標簽不可以超過 16 個字元。往後可以使用命令 e2label 或 tune2fs -L 隨時改變。