Linux上的新一代文件系統-Btrfs使用

Linux上的新一代文件系統-Btrfs使用

準備工做

Btrfs 支持已經包含在linuxlinux-lts的內核中。php

要使用一些用戶空間工具的話,須要安裝 不在 base 包組中的並且基礎操做必須的 btrfs-progs 軟件包。html

若是你須要從 Btrfs 文件系統引導(好比說你的內核和內存盤在一個 Btrfs 的分區上),請檢查你的 啓動引導器 是否支持 Btrfs。node

建立文件系統

下文展現瞭如何建立一個新的 Btrfs 文件系統。要將一個 ext3/4 分區轉換爲 Btrfs,請參考 #從 Ext3/4 轉換。要使用無分區的配置,請參考 #無分區 Btrfs 磁盤linux

查閱 mkfs.btrfs(8) 以獲取更多信息。git

單一設備上的文件系統

在分區 /dev/partition 上建立一個 Btrfs 文件系統:github

# mkfs.btrfs -L mylabel /dev/partition

Btrfs 的默認塊大小爲 16KB。 要使用更大的 blocksize 數據/元數據的話,能夠經過指定 -n 來修改 nodesize,正如本例所示的設置爲 16KB:算法

# mkfs.btrfs -L mylabel -n 16k /dev/partition

多設備文件系統

Warning: Btrfs 的 RAID 5 和 RAID 6 模式存在致命缺陷, 不該當用於任何場景,除非用來作丟失數據的測試。 查閱 the Btrfs page on RAID5 and RAID6 以獲取最新動態。

多個設備能夠用來建立一組 RAID。支持的RAID級別有 RAID 0,RAID 1,RAID 10,RAID 5 和 RAID 6。數據和元數據的 RAID 等級能夠獨立地用 -d-m 參數指定。默認狀況下元數據使用鏡像 (RAID1),而數據則會被條帶化 (RAID0)。參閱 Btrfs Wiki:在多個設備上使用 btrfs 或查閱 mkfs.btrfs 的手冊頁得到更多信息.shell

# mkfs.btrfs -d raid0 -m raid1 /dev/part1 /dev/part2 ...

要將多個 Btrfs 設備做爲一個池使用的話,你須要將 udev 鉤子或者 btrfs 鉤子加入到 /etc/mkinitcpio.conf 中。查閱 Mkinitcpio (簡體中文)#經常使用鉤子以獲取更多信息。緩存

Note:
  • 磁盤陣列中的各個磁盤大小不同可能會致使不能使用全部磁盤的完整空間。爲了充分利用全部磁盤的容量,使用 -d single 而不是 -d raid0 -m raid1 (元數據鏡像,數據非鏡像且非條帶化)
  • 掛載一個這樣的文件系統可能會致使除了對應的 .device 的全部任務卡死且 Systemd 可能由於沒法正確處理多設備 btrfs 文件系統上的每個設備而不能正常啓動,詳見這個 BUG 報告
  • 有些啓動加載器不支持多設備文件系統,好比 Syslinux

RAID 中有關於維護多設備上的 btrfs 文件系統的一些建議.多線程

配置文件系統

寫時複製 (CoW)

默認狀況下 btrfs 對全部文件使用 寫時複製 (CoW)。參閱the Btrfs Sysadmin Guide section 以獲取實現細節以及它的優勢和缺點。

停用 CoW

要對某個子捲上的新文件停用寫時複製,使用 nodatacow 掛載選項。這隻會影響新建立的文件,寫時複製仍然會在已存在的文件上生效。nodatacow 參數一樣會禁用壓縮。參閱 btrfs(5) 以瞭解細節。

Note: 來自 Btrfs Wiki Mount options: within a single file system, it is not possible to mount some subvolumes with nodatacow and others with datacow. The mount option of the first mounted subvolume applies to any other subvolumes.
Note: 根據 Btrfs Wiki Mount options: 在單個文件系統中,沒法使用 nodatacow 參數掛載某些子卷,而其餘的使用 datacow 參數。第一個被掛載子卷的掛載參數將會應用於其餘全部子卷。

要單文件或目錄禁用寫時複製特性,請使用下面的命令:

$ chattr +C [文件/目錄的地址(path)]

這會爲這個文件的單個引用停用寫時複製,若是這個文件不僅有一個引用(例如經過 cp --reflink=always 生成或者在文件系統快照中),寫時複製依然生效.

Note: 來自 chattr 的手冊頁:在btrfs上,'C' 標誌應該被設置在新建的或者是空白的文件/目錄,若是被設置在已有數據的文件,當塊分配給該文件時,文件將不肯定是否徹底穩定。若是'C' 標誌被設置給一個目錄,將不會影響目前的目錄,但在該目錄建立的新文件將具備No_COW屬性。
Tip: 能夠用下面的方法爲已存在的文件或目錄停用寫時複製:
$ mv /path/to/dir /path/to/dir_old
$ mkdir /path/to/dir
$ chattr +C /path/to/dir
$ cp -a /path/to/dir_old/* /path/to/dir
$ rm -rf /path/to/dir_old

須要保證這個過程當中目標文件不會被使用,同時注意下面描述的 mvcp --reflink 並不起做用.

建立輕量副本

默認狀況下,使用 cp 複製 Btrfs 文件系統上的文件時,會建立實際副本。要建立引用原始數據的輕量級副本,請使用 reflink 選項:

$ cp --reflink source dest

參閱 cp 的手冊頁得到關於 --reflink 標誌的更多信息。

壓縮

Btrfs支持透明壓縮,這意味着分區裏的每一個文件都被自動壓縮。這不單減少了文件的大小,在某些特定的場景下(好比單線程、重文件 I/O)還提升了性能,儘管在其餘的場景下(好比多線程和/或具備大文件 I/O 的 CPU 密集型任務)顯著得影響了性能。使用更快的壓縮算法好比 zstdlzo 一般能夠得到更好的性能,這個性能測試 提供了詳細的對比。

壓縮能夠經過使用掛載參數 compress 來啓用,它的可選值包括 zliblzozstd 或者是 no (不啓用壓縮)。只有在加入掛載選項後建立或修改的文件纔會被壓縮。

不過也能夠在安裝之後經過 btrfs filesystem defragment -calg (也可使用其它壓縮算法,例如 zlib / lzo) 壓縮一個分區 (例如從 ext3/4 轉換之後的文件系統).

要將整個文件系統經過 zstd 從新壓縮,運行下面的命令:

# btrfs filesystem defragment -r -v -czstd /

在一個新的 btrfs 分區上安裝 Arch Linux 時,要充分利用壓縮特性,最好安裝時就啓用壓縮功能。在File systems 時使用 compress 參數: mount -o compress=lzo /dev/sdxY /mnt/.在 時把 compress=lzo 添加到 fstab 中的根目錄中的選項上。

Tip: 經過 chattr +c ,也能夠在不使用 compress 選項的狀況下爲單個文件啓用壓縮屬性.對目錄啓用會使這個目錄下新文件自動壓縮.
Warning:
  • 若是你使用 zstd 這個參數的話,使用沒有 zstd 支持的舊版本內核或者 btrfs-progs 可能不能讀取或者修復你的文件系統。
  • GRUBrEFInd 目前缺乏對 zstd 的支持,請使用沒有啓用 zstd 選項的獨立 boot 分區或者使用其餘已被支持的算法從新壓縮引導文件,好比:
    $ btrfs filesystem defragment -v -clzo /boot/*

子卷

"btrfs 子卷不是 (也不能看做) 塊設備,一個子卷能夠看做 POSIX 文件名字空間.這個名字空間能夠經過子捲上層訪問,也能夠獨立掛載."[1]

每一個 btrfs 文件系統都有一個 ID 爲 5 的頂層子卷。它能夠掛載爲 /(默認狀況下),或者能夠掛載爲另外一個子卷。子卷能夠在文件系統中移動,它們經過其 ID 而不是路徑來標識。

參閱下面的連接得到更多信息:

建立子卷

要建立一個子卷:

# btrfs subvolume create /path/to/subvolume

列出子卷列表

要列出當前路徑 (path) 下的子卷:

# btrfs subvolume list -p path

刪除子卷

要刪除一個子卷:

# btrfs subvolume delete /path/to/subvolume

只是移除子卷的目錄 /path/to/subvolume 而不使用這個命令並不會刪除一個子卷.

掛載子卷

可使用 subvol=/path/to/subvolumesubvolid=objectid' 掛載標誌來安裝子卷,就像文件系統分區同樣。例如,您能夠擁有一個名爲 subvol_root 的子卷,並將其掛載爲 /。經過在文件系統的頂層建立各類子卷,而後將它們安裝在適當的掛載點,能夠模仿傳統的文件系統分區。 所以,可使用#Snapshots[broken link: invalid section]輕鬆地將文件系統(或其一部分)恢復到先前的狀態。

Tip: 爲了方便地修改子卷的結構,請考慮建立新的子卷,而後掛載爲 / 而不是使用頂層子卷 (ID=5) 掛載爲根目錄(這是默認行爲)。

 

Note: 「大多數掛載選項適用於 整個文件系統,而且只有要掛載的第一個子卷的選項纔會生效。 這是由於沒有實現,將來可能會發生變化。」 [2] 查閱 Btrfs Wiki FAQ 以瞭解哪些掛載參數可以被用於獨立的子卷

參閱 Snapper#Suggested filesystem layout, Btrfs SysadminGuide#Managing SnapshotsBtrfs SysadminGuide#Layout 得到子卷應用的示例.

有關特定於btrfs的掛載選項的完整列表,請參閱 btrfs(5)

改變默認子卷

若是掛載時不指定 subvol= 選項便會掛載默認子卷.要改變默認子卷:

# btrfs subvolume set-default subvolume-id /

subvolume-id 能夠經過#列出子卷列表得到.

Note: 在安裝了 GRUB 的系統上,在改變默認子卷之後不要忘記運行 grub-install . 參見 this forum thread.

經過 btrfs subvolume set-default 修改默認子卷將會致使文件系統的最頂層沒法訪問,除非使用 subvol=/ 或者 subvolid=5 掛載參數。[3]

配額

Warning: Qgroup 尚且不穩定且在有(過多)快照的子捲上應用配額可能會致使性能問題,好比在刪除快照的時候。 此外,這裏還有更多 已知問題.

Btrfs中的配額支持是經過使用配額組或 qgroup 在子卷級別實現的:默認狀況下,每一個子卷都以 0/<subvolume id> 的形式分配配額組。 可是,若是須要的話,可使用任意數字建立配額組。

要使用 qgroup,你須要首先啓用它:

# btrfs quota enable <path>

今後時開始,新建立的子卷將由這些配額組控制。 爲了可以爲已建立的子卷啓用配額,首先正常啓用配額,而後使用它們的 <subvolume id> 爲每一個子卷建立一個配額組,再從新掃描它們:

# btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path>
# btrfs quota rescan <path>

Btrfs 中的配額組造成樹層次結構,其中 qgroup 附加到子卷。大小限制由每一個 qgroup 獨立配置且在並在包含給定子卷的樹中達到任何限制時應用。

配額組的限制能夠應用於總數據使用,非共享數據使用,壓縮數據使用或所有。文件複製和文件刪除可能都會影響限制,由於若是刪除原始卷的文件而且只剩下一個副本,則另外一個 qgroup 的非共享限制可能會更改。例如,新快照幾乎與原始子卷共享全部塊,對子卷的新寫入將向專用限制提高,一個卷中的公共數據的刪除將升高到另外一個卷中的專用限制。

要對 qgroup 應用限制,請使用命令 btrfs qgroup limit。根據你的使用狀況,使用總限制,非共享限制( -e)或壓縮限制( -c)。

顯示文件系統使用中給定路徑的使用狀況和限制:

# btrfs qgroup show -reF <path>

提交間隔

將數據寫入文件系統的頻率由 Btrfs 自己和系統的設置決定。Btrfs 默認設置爲 30 秒檢查點間隔,新數據將在 30 秒內被提交到文件系統。 這能夠經過在 /etc/fstab 增長 commit 掛載參數來修改:

LABEL=arch64 / btrfs defaults,noatime,compress=lzo,commit=120 0 0

系統範圍的設置也會影響提交間隔。它們包括 /proc/sys/vm/* 下的文件,這超出了本維基文章的範圍,所以再也不贅述。 它們的內核文檔位於 Documentation/sysctl/vm.txt

SSD TRIM

Btrfs 文件系統可以從支持 TRIM 命令的 SSD 驅動器中釋放未使用的塊。

有關啓用和使用 TRIM 的更多信息,請參閱 Solid State Drives#TRIM

 

使用

顯示已使用的/空閒空間

df 這樣的用戶空間工具可能不會準確的計算剩餘空間 (由於並無分別計算文件和元數據的使用狀況) 。推薦使用 btrfs filesystem usage 來查看使用狀況。好比說:

# btrfs filesystem usage /
Note: The btrfs filesystem usageRAID5/RAID6 設備上可能沒法正常工做。

查看 [4] 以獲取更多信息。

碎片整理

Btrfs 支持經過配置 掛載參數 autodefrag 來實如今線的碎片整理。要手動整理你的根目錄的話,可使用:

# btrfs filesystem defragment -r /

使用不帶 -r 開關的上述命令將致使僅整理該目錄的子卷所擁有的元數據。這容許經過簡單地指定路徑進行單個文件碎片整理。

對具備 CoW 副本(快照副本或使用cp --reflink或 bcp 建立的文件)進行碎片整理以及使用帶壓縮算法的 -c 開關進行碎片整理可能會致使生成兩個不相關的文件從而增長磁盤使用量。

RAID

Btrfs 提供對 RAID 一類的 #多設備文件系統的原生支持.參閱 the Btrfs wiki page 得到更多信息. Btrfs 管理員手冊 提供了技術背景信息.

Warning: 奇偶校驗 RAID(RAID 5/6)代碼中存在多個嚴重的數據丟失錯誤。 檢查 Btrfs 的 Wiki RAID5/6 page 和 BUG 彙報 linux-btrfs mailing list 以獲取更多信息。

Scrub

Btrfs Wiki 術語表中寫到 scrub 是一種 "在線文件系統檢查工具".它讀取文件系統中的文件和元數據,並使用校驗值和 RAID 存儲上的鏡像區分並修復損壞的數據.

Warning: 運行 scrub 會阻止系統待機, 詳見 這個討論.

手動啓動

啓動一個(後臺運行的)包含 / 目錄的文件系統在線檢查任務:

# btrfs scrub start /

檢查該任務的運行狀態:

# btrfs scrub status /

經過服務或者定時器啓動

btrfs-progs 軟件包帶有 btrfs-scrub@.timer 系統單元,用來每個月運行 scrub 命令.經過添加掛載點的參數來啓用它,例如btrfs-scrub@-.timer (/) 或者 btrfs-scrub@home.timer (/home).

也能夠經過啓動 btrfs-scrub@.service 來手動運行 scrub (使用一樣的掛載點參數) ,相對於 # btrfs scrub 這麼作的優勢是會記錄在 Systemd 日誌中。

 

Balance

「Balance 將會經過分配器再次傳遞文件系統中的全部數據。它主要用於在添加或刪除設備時跨設備從新平衡文件系統中的數據。若是設備出現故障,餘額將爲冗餘 RAID 級別從新生成缺失的副本。」[5]。參閱 上游的 FAQ.

在單設備文件系統上,餘額對於(臨時)減小分配但未使用(元)數據塊的數量也是有用的。有時候這對於解決 "filesystem full" 故障 來講也是必須的。

# btrfs balance start /
# btrfs balance status /

快照

"快照是和特定子卷共享文件和元數據的特殊子卷, 利用了 btrfs 的寫時複製特性." 詳見 Btrfs Wiki SysadminGuide#Snapshots.

要建立一個快照:

# btrfs subvolume snapshot source [dest/]name

source爲要建立快照的對象,[dest/]name爲快照安放路徑。

加入 -r 參數能夠建立一個只讀快照. 爲只讀快照建立一個快照能夠得到一個只讀快照的可寫入版本.

Note: 快照不是遞歸包含的,這意味着子卷內的子卷在快照裏是空目錄。

發送和接收

能夠經過 send 命令發送一個快照,一般會與 btrfs 中的 receive 組成管道.例如將快照 /root_backup (也許是/的備份) 發送到 /backup:

# btrfs send /root_backup | btrfs receive /backup

只能發送只讀快照,上面的命令在將子卷複製到外部設備 (例如備份驅動器) 時會頗有用.

也能夠只發送兩個快照間發生變化的部分,例如若是你已經發送了快照 root_backup ,而後又創建了一個新的只讀快照 root_backup_new ,能夠這樣完成增量發送:

# btrfs send -p /root_backup /root_backup_new | btrfs receive /backup

如今你 /backup 的快照會是 root_backup_new.

參閱 Btrfs Wiki's Incremental Backup page 得到更多信息 (例如使用工具自動化這一過程)。

去重

使用寫時複製,Btrfs可以複製文件或整個子卷而無需實際複製數據。可是,不管什麼時候更改文件,都會建立一個新的 「真正的」 副本。重複數據刪除更進一步,經過主動識別共享公共序列的數據塊並將它們組合到具備相同寫時複製語義的範圍內。

專用於 Btrfs 分區去重的工具包括 duperemoveAUR,bedupAUR 和 btrfs-dedup。人們可能還但願僅使用基於文件的級別對數據進行重複數據刪除,好比 rmlint 或者 jdupesAUR。有關這些程序的可用功能的概述和其餘信息,請查看上游 Wiki 條目

此外,Btrfs開發人員正致力於帶內(也稱爲同步或內聯)重複數據刪除,這意味着在將新數據寫入文件系統時完成重複數據刪除。目前,它仍然是一個在 out-of-tree 開發的實驗。願意測試新功能的用戶能夠閱讀相關的內核 Wiki 頁

已知問題

一些在嘗試以前應該知道的限制。

加密

Btrfs 目前尚未內建的加密支持,但將來可能加入此功能。能夠在運行mkfs.btrfs前加密分區,參閱Dm-crypt with LUKS.

(若是已經建立了文件系統,可使用EncFSTrueCrypt,可是這樣會沒法使用 btrfs 的一些功能。)

交換文件

Btrfs 不支持交換文件,由於 Btrfs 有潛在的文件系統損壞風險,沒有加入交換文件須要的功能,參閱這裏。交換文件能夠掛載到 loop 設備中,可是性能比較差。systemd-loop-swapfileAUR[broken link: archived in aur-mirror]提供了須要的服務文件。

TLP

使用 TLP 須要特殊的預防措施,以免文件系統損壞。有關更多信息,請參閱TLP#Btrfs

提示和技巧

無分區 Btrfs 磁盤

Warning: 大多數用戶不但願這種類型的設置,應該在常規分區上安裝 Btrfs。 此外,GRUB 強烈建議不要安裝到無分區磁盤。

Btrfs 能在整個設備上使用,替代 MBRGPT 分區表,可是並不要求必定這麼作,最簡單的方法是 在一個已存在的分區上建立 btrfs 文件系統[broken link: invalid section]. 若是你選擇用 btrfs 替代分區表, 能夠用 子卷[broken link: invalid section]模擬不一樣的分區。下列是在單個無分區設備上使用 Btrfs 文件系統的限制:

運行下面的命令把整個設備的分區表替換成 btrfs:

# mkfs.btrfs /dev/sdX

若是設備上存在分區表,則須要使用:

# mkfs.btrfs -f /dev/sdX

例如 /dev/sda 而不是 /dev/sda1. 後一種形式會格式化現有的分區而不是替換掉原有的分區表.

像使用普通的 MBR 分區表存儲設備同樣安裝 啓動管理器, 參考 Syslinux#Manual installGRUB/Tips and tricks#Install to partition or partitionless disk

從 Ext3/4 轉換

Warning: 到2015年中後期, btrfs 郵件列表中報告了多起失敗的轉換.儘管近期的更新有所修復,但仍是建議當心使用.在開始以前肯定你有 可用的備份而且願意承擔丟失數據的風險. 詳見 Btrfs Wiki:從 Ext3 文件系統轉換 .

從安裝 CD 啓動,而後轉化分區:

# btrfs-convert /dev/partition

掛載轉換後的分區並修改/etc/fstab文件,指定分區類型(type 爲 btrfs,fs_passno [最後一列] 修改成0,Btrfs在啓動時並不進行磁盤檢查). 還要注意的是分區的UUID將有改變,因此使用UUID時,更新fstab中相應的條目。 chroot 到系統並重建 GRUB 條目(若是對此過程不熟悉,參考Install from existing LinuxGRUB). 若是正在轉換根目錄,還須要在 chroot 環境中重建初始化內存盤 (mkinitcpio -p linux). 若是 GRUB 不能啓動 (例如 'unknown filesystem' 錯誤),則須要從新安裝 (grub-install /dev/partition) 並生成配置文件 (grub-mkconfig -o /boot/grub/grub.cfg).

確認沒有問題後,完成轉換經過刪除備份ext2_saved子卷,請注意,若是沒了它(備份子卷),你將沒辦法還原回 ext3/4 文件系統。

# btrfs subvolume delete /ext2_saved

最後經過 balance 回收空間.

請記住,以前安裝的某些應用程序必須適配 Btrfs。值得注意的是 TLP#Btrfs 須要特別當心以免文件系統損壞,但其餘應用程序也可能從某些功能中獲益。

Checksum 硬件加速

要驗證Btrfs校驗和是不是硬件加速:

$ dmesg | grep crc32c
Btrfs loaded, crc32c=crc32c-intel

若是你看到 crc32c=crc32c-generic,這頗有多是由於你的根分區是 Btrfs,你將會須要編譯 crc32c-intel 進入內核並啓用它。將 crc32c-intel 放入 mkinitcpio.conf不會 生效的。

損壞恢復

btrfs-check 不能在一個已掛載的文件系統上工做。爲了可以在不從 Live USB 啓動的狀況下使用 btrfs-check,須要將其添加到初始內存盤:

/etc/mkinitcpio.conf
BINARIES=("/usr/bin/btrfs")

Regenerate the initramfs

以後若是啓動時出現問題,則可使用該實用程序進行修復。

Note: 若是 fsck 進程必須使空間緩存(和/或其餘緩存?)無效,那麼後續引導掛起一段時間是正常的(它可能會給出關於 btrfs-transaction 掛起的控制檯消息)。系統應該在一段時間後從中恢復。

查閱 Btrfs Wiki 頁 以獲取更多信息。

引導進入快照

爲了可以引導進入快照,你必須經過 內核參數 rootflags=subvol=/path/to/subvolume 來指定子卷,同時須要修改 /etc/fstab 使用 subvol= 來指定相同的子卷。或者,子卷能夠用其 id 來指定 - 例如能夠用例如可檢索的。 btrfs subvolume list /root/path - 和rootflags=subvolid=objectid 分別做爲內核參數subvolid= objectid 做爲 /etc/fstab 中的掛載選項。

若是使用 GRUB,則能夠在 grub-btrfsgrub-btrfs-gitAUR 的幫助下從新生成配置文件時使用 Btrfs 快照自動填充啓動菜單。

Use Btrfs subvolumes with systemd-nspawn

查閱 Systemd-nspawn#Use Btrfs subvolume as container rootSystemd-nspawn#Use temporary Btrfs snapshot of container 等文章。

故障排除

參閱 Btrfs Problem FAQ 得到排除通常問題的信息.

GRUB

分區偏移

Note: 在試圖將 core.img 嵌入到已經分區的磁盤上時可能會發生偏移問題. 這意味着能夠把 corg.img 嵌入到 btrfs 池或是無分區磁盤 (例如 /dev/sdX) 上.

Grub 2能夠啓動 Btrfs 分區,可是由於模塊比較大, grub-install 安裝的 core.img 文件超過了 MBR 與第一個分區之間的空間大小 (63 扇區/31.5KiB) .更新後的 fdiskgdisk 的磁盤工具會經過第一個分區前空出 1-2M 的空間避免此問題.

Missing root

若是啓動 RAID 卷設備後編輯了 /usr/share/grub/grub-mkconfig_lib 移除了 echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}" 中的引號,可能會遇到 error no such device: root 問題,從新生成 GRUB 設置文件應該能避免這個問題.

BTRFS: open_ctree failed

2014 年 11 月的 systemdmkinitcpio 中的 bug 可能致使使用 mkinitcpio.confbtrfs hook 的用戶啓動多設備文件系統的 btrfs 卷時出現錯誤\:

BTRFS: open_ctree failed
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error

In some cases useful info is found in syslog - try dmesg|tail or so.

You are now being dropped into an emergency shell.

一個臨時解決方案是從 HOOKS 中移除 btrfs 並把它放入 MODULES 中,經過 mkinitcpio -p linux 從新生成 initramfs 並從新啓動.

參閱 原來的論壇討論FS#42884 得到更多的信息和討論.

另外若是在掛載 RAID 卷組時缺乏某個卷時也有可能會發生這個錯誤.這種狀況下你須要把 degraded 加入到 /etc/fstab 中,若是根目錄在卷組上,同時須要加入 rootflags=degraded 內核參數

檢查 btrfs 文件系統

Warning: btrfs (特別是 btrfs check 命令)仍在開發階段, 強烈建議在加上 --repair 參數運行 btrfs check 時作一個 備份.

btrfs check 能夠檢查並修復一個未掛載的 btrfs 文件系統.可是因爲它並未開發完成,它並不能修復某些錯誤 (即便這些錯誤沒致使沒法掛載).

參閱 Btrfsck 得到更多信息.

另見

更多參考

相關文章
相關標籤/搜索