Linux

在 Linux 上儲存和備份 1000 萬個文件

  • April 16, 2020

我執行一個網站,其中大約 1000 萬個文件(書籍封面)儲存在 3 個級別的子目錄中,範圍

$$ 0-f $$:

0/0/0/
0/0/1/
...
f/f/f/

這導致每個目錄大約有 2400 個文件,這在我們需要檢索一個文件時非常快。這也是許多問題所建議的做法。

但是,當我需要備份這些文件時,僅瀏覽包含 10m 文件的 4k 目錄就需要很多天。

所以我想知道我是否可以將這些文件儲存在一個容器中(或 4k 容器中),每個容器的行為都完全像一個文件系統(某種掛載的 ext3/4 容器?)。我想這幾乎與直接訪問文件系統中的文件一樣有效,並且這將具有非常有效地複製到另一台伺服器的巨大優勢。

關於如何做到最好的任何建議?或者任何可行的替代方案(noSQL,…)?

用於快速訪問和備份數百萬個文件的選項

向有類似問題的人借

這聽起來很像 USENET 新聞伺服器和記憶體網路代理所面臨的一種更簡單的問題:數億個隨機訪問的小文件。您可能想從他們那裡得到提示(除非他們通常不必進行備份)。

http://devel.squid-cache.org/coss/coss-notes.txt

http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=4074B50D266E72C69D6D35FEDCBBA83D?doi=10.1.1.31.4000&rep=rep1&type=pdf

顯然,循環新聞文件系統的循環性質與您無關,但是具有多個磁碟文件/設備的較低級別概念具有打包的圖像以及使用者提供的用於查找位置資訊的資訊的快速索引非常合適。

專用文件系統

當然,這些只是與人們談論的在文件中創建文件系統並將其掛載到環回上的概念相似,除非您可以編寫自己的文件系統程式碼。當然,既然您說您的系統主要是讀取,您實際上可以將一個磁碟分區(或用於靈活調整大小的 lvm 分區)專用於這一目的。當您要備份時,以只讀方式掛載文件系統,然後複製分區位。

LVM

我在上面提到 LVM 對於允許動態調整分區大小很有用,這樣您就不需要備份大量空白空間。但是,當然,LVM 還有其他可能非常適用的特性。特別是“快照”功能,它可以讓您在某個時刻凍結文件系統。任何意外rm -rf或任何事情都不會干擾快照。根據您要執行的操作,這可能足以滿足您的備份需求。

RAID-1

我確定您已經熟悉 RAID 並且可能已經使用它來提高可靠性,但是 RAID-1 也可以用於備份,至少如果您使用軟體 RAID(您可以將它與硬體 RAID 一起使用,但實際上給您較低的可靠性,因為它可能需要相同的模型/版本控制器才能讀取)。這個概念是您創建一個 RAID-1 組,其磁碟比您實際連接的正常可靠性需要多一個磁碟(例如,如果您使用帶有兩個磁碟的軟體 RAID-1,或者可能是一個大磁碟和一個硬體 - 則使用第三個磁碟 -具有較小磁碟的 RAID5,在硬體 RAID-5 之上具有軟體 RAID-1)。當需要進行備份時,安裝一個磁碟,讓 mdadm 將該磁碟添加到 RAID 組,等到它指示完整性,可選地要求驗證清理,然後刪除該磁碟。當然,

引用自:https://serverfault.com/questions/275050