如果你想在一個媒體專案中用到了多個磁碟或分割區,不想丟失任何現有資料,但又想將所有檔案都存放在一個驅動器下,該怎麼辦?這時,mergefs 就能派上用場!
mergerfs 是一個聯合檔案系統,旨在簡化儲存和管理眾多商業儲存裝置上的檔案。
你需要從他們的 GitHub 頁面獲取最新的 RPM。Fedora 的版本名稱中帶有 “fc” 和版本號。例如,這是 Fedora 31 的版本: mergerfs-2.29.0-1.fc31.x86_64.rpm。
使用 sudo
安裝已下載的 mergefs 軟體包:
$ sudo dnf install mergerfs-2.29.0-1.fc31.x86_64.rpm
現在,你可以將多個磁碟掛載為一個驅動器。如果你有一台媒體伺服器,並且希望所有媒體檔案都顯示在一個地方,這將很方便。如果將新檔案上傳到系統,那麼可以將它們複製到 mergefs 目錄,mergefs 會自動將它們複製具有足夠可用空間的磁碟上。
這是使你更容易理解的例子:
$ df -hT | grep disk/dev/sdb1 ext4 23M 386K 21M 2% /disk1/dev/sdc1 ext4 44M 1.1M 40M 3% /disk2$ ls -l /disk1/Videos/total 1-rw-r--r--. 1 curt curt 0 Mar 8 17:17 Our Wedding.mkv$ ls -l /disk2/Videos/total 2-rw-r--r--. 1 curt curt 0 Mar 8 17:17 Baby's first Xmas.mkv-rw-rw-r--. 1 curt curt 0 Mar 8 17:21 Halloween hijinks.mkv
在此例中掛載了兩塊磁碟,分別為 disk1
和 disk2
。兩個驅動器都有一個包含檔案的 Videos
目錄。
現在,我們將使用 mergefs 掛載這些驅動器,使它們看起來像一個更大的驅動器。
$ sudo mergerfs -o defaults,allow_other,use_ino,category.create=mfs,moveonenospc=true,minfreespace=1M /disk1:/disk2 /media
mergefs 手冊頁非常龐雜,因此我們將說明上面提到的選項。
defaults
:除非指定,否則將使用預設設定。allow_other
:允許 sudo
或 root
以外的使用者檢視檔案系統。use_ino
:讓 mergefs 提供檔案/目錄 inode 而不是 libfuse。雖然不是預設值,但建議你啟用它,以便連結的檔案共用相同的 inode 值。category.create=mfs
:根據可用空間在驅動器間傳播檔案。moveonenospc=true
:如果啟用,那麼如果寫入失敗,將進行掃描以查詢具有最大可用空間的驅動器。minfreespace=1M
:最小使用空間值。disk1
:第一塊硬碟。disk2
:第二塊硬碟。/media
:掛載驅動器的目錄。看起來是這樣的:
$ df -hT | grep disk/dev/sdb1 ext4 23M 386K 21M 2% /disk1/dev/sdc1 ext4 44M 1.1M 40M 3% /disk2$ df -hT | grep media1:2 fuse.mergerfs 66M 1.4M 60M 3% /media
你可以看到現在 mergefs 掛載顯示的總容量為 66M,這是兩塊硬碟的總容量。
繼續範例:
有一個叫 Baby's second Xmas.mkv
的 30M 視訊。讓我們將其複製到用 mergerfs 掛載的 /media
資料夾中。
$ ls -lh "Baby's second Xmas.mkv"-rw-rw-r--. 1 curt curt 30M Apr 20 08:45 Baby's second Xmas.mkv$ cp "Baby's second Xmas.mkv" /media/Videos/
這是最終結果:
$ df -hT | grep disk/dev/sdb1 ext4 23M 386K 21M 2% /disk1/dev/sdc1 ext4 44M 31M 9.8M 76% /disk2$ df -hT | grep media1:2 fuse.mergerfs 66M 31M 30M 51% /media
從磁碟空間利用率中可以看到,因為 disk1
沒有足夠的可用空間,所以 mergefs 自動將檔案複製到 disk2
。
這是所有檔案詳情:
$ ls -l /disk1/Videos/total 1-rw-r--r--. 1 curt curt 0 Mar 8 17:17 Our Wedding.mkv$ ls -l /disk2/Videos/total 30003-rw-r--r--. 1 curt curt 0 Mar 8 17:17 Baby's first Xmas.mkv-rw-rw-r--. 1 curt curt 30720000 Apr 20 08:47 Baby's second Xmas.mkv-rw-rw-r--. 1 curt curt 0 Mar 8 17:21 Halloween hijinks.mkv$ ls -l /media/Videos/total 30004-rw-r--r--. 1 curt curt 0 Mar 8 17:17 Baby's first Xmas.mkv-rw-rw-r--. 1 curt curt 30720000 Apr 20 08:47 Baby's second Xmas.mkv-rw-rw-r--. 1 curt curt 0 Mar 8 17:21 Halloween hijinks.mkv-rw-r--r--. 1 curt curt 0 Mar 8 17:17 Our Wedding.mkv
當你將檔案複製到 mergefs 掛載點時,它將始終將檔案複製到有足夠可用空間的硬碟上。如果池中的所有驅動器都沒有足夠的可用空間,那麼你將無法複製它們。