文件系統和同步
簡短摘要
文件系統是完整性、性能和操作的平衡。同步是關於一致性和解決沖突的模型,而不僅僅是「復制文件」。從要求(p95 latency, RPO/RTO,負載類型)開始,選擇FS和協議,配置日誌和鎖定,設置SLO,自動化snapshot/version,並使用正確的同步工具。
在負載下選擇文件系統
通用Linux FS
ext4是穩定的「主力」。選項:「noatime, nodiratime, discard(謹慎),data=ordered」。適用於VM驅動器、共享目錄、CI工件。
XFS在大型文件/並行性(媒體內容,logi,DWH)上很強大。選項:「noatime,inode 64」;在大文件下面,您應該配置「reflink=1」 (clone)。
ZFS-CoW,完整性檢查,snapshot/復制本 「send/recv」,ARC/L2ARC,ZIL/SLOG for sync。對於後備箱、NAS、要求完整性的基礎池而言是獨一無二的。
Btrfs-CoW,userspace 中的狙擊/壓縮/RAID;在Dev/test和edge下很好,對於沒有調整的OLTP更小心。
Windows/跨平臺格式
NTFS-ACL, ADS,適用於SMB; 「DisableLastAccess」適用於性能。
exFAT是可移動媒體,沒有權限和日誌(不用於prod)。
影響可靠性和速度的設置
日誌和障礙:「data=ordered」(默認情況下為ext4)-平衡;「data=journal」-更安全,但速度更慢;確保啟用了write barriers(或具有BBU/PLP的控制器)。
fsync/sync:關鍵流(日誌/事務)必須顯式調用「fsync()」;否則,事故可能造成損失。
atime:「relatime」/「noatime」降低了寫作壓力。
xattr/ACL:如果需要POSIX ACL和安全標簽,則啟用。
塊大小/記錄大小:ZFS「記錄大小」=16K' for DB; '1M' for Big Media。
bash ext4 for CI artifacts
UUID=... /var/lib/ci ext4 noatime,nodev,nosuid,data=ordered 0 2
XFS for Media Directories
UUID=... /srv/media xfs noatime,attr2,inode64 0 0
ZFS for backups and snapshots (creation)
zpool create tank mirror nvme0n1 nvme1n1 zfs set compression=lz4 atime=off tank/backups
網絡和分布式文件系統
NFS/SMB (NAS方法)
NFSv3/v4:簡單而快速;v4提供鎖定和Kerberos(「sec=krb5p」)。不要依靠NFS進行高頻「深度」fsync-更好的本地驅動器+異步卸載。
SMB 3.x: multichannel,加密,與AD集成。在敏感數據上啟用簽名/加密。
/pool/projects 10. 0. 0. 0/16(rw,no_root_squash,sec=krb5p,async)
SMB(片段):
[reports]
path = /pool/reports read only = no vfs objects = acl_xattr, recycle smb encrypt = required
分布式FS
CephFS是Ceph之上的POSIX;適合水平尺度、狙擊手、量子、元數據分布。
GlusterFS-易於啟動,復制品/軟墊,但用小文件和p99整齊。
Lustre/IBM Spectrum Scale-LDC/大文件,要求網絡/操作。
9P (Virtio-fs)-用於VM shering,不適用於剛性SLO的原型負載。
建議:對於OLTP/錢包-非網絡FS;使用塊卷。對於靜態內容/共享工件-NFS/SMB/對象+CDN。
鎖定、緩存和一致性
Advisory vs mandatory locks: Linux обычно advisory;SMB支持oplocks/leases,NFSv4支持stateful locks。
客戶機緩存:激進的腰包加速讀取,但在多客戶端的情況下,會增加發生沖突的風險。
- Strong(本地FS,ZFS)。
- Close to open (NFS):在「close ())/open()」中可見更改。
- Eventual(某些分布式/對象腳本)。
- 觀察:NTP/PTP;時間漂移打破沖突和TTL。
同步: 模型和工具
模型
一路(push/pull):發布文物、上載報告、後臺備份。
兩路(bi-dir):協作;需要發生沖突並進行轉換。
Hub-and-spoke:通過中央節點/群集的星星(MinIO/S3+代理)。
近實時vs batch:inotify/更改日誌與周期窗口。
工具
rsync是事實上的一路標準;'--delete','--partial','--inplace'(小心)。
rclone-S3/雲、哈希檢查、服務器側復制。
Unison-真正的雙向解決沖突。
Syncthing-p2p, version,方便工作文件夾。
lsyncd是inotify上的rsync觸發器;near-real-time.
ZFS send/recv是snapshot/increments的完美「合成器」(字節有效)。
rsync(一路,發布靜態目錄):bash rsync -az --delete --numeric-ids --partial --inplace \
/srv/builds/ user@edge:/var/www/builds/
Unison (bi-dir, profile):
root =/srv/shared root = ssh ://user @ peer//srv/shared prefer =/srv/shared # in case of conflict - local side repeat = watch # inotify ignore = Name. tmp
lsyncd(在rsync之上的近實時):
lua settings { logfile="/var/log/lsyncd. log", statusFile="/var/run/lsyncd. status" }
sync {
default. rsync,
source="/srv/outbox",
target="user@remote:/srv/inbox",
rsync={ archive=true, compress=true, delete=true }
}
ZFS復制版(嵌入版):
bash zfs snapshot tank/data@now zfs send -i tank/data@prev tank/data@now ssh backup zfs recv -F backup/data
轉化,狙擊和「籃子」
CoW snapshots (ZFS/Btrfs/CephFS):快速回滾點,分鐘。
應用程序級驗證(Nextcloud/Syncthing/Object):方便用戶使用。
SMB/NFS上的籃子/回收器:避免意外移除,但不替換備用。
安全性和訪問
ACL和xattr: POSIX ACL, SID/ACE for SMB, mapping uid/gid。
通過網關讀取/寫入:SFTP/HTTPS/WebDAV-當無法向外打開SMB/NFS時。
加密:LUKS/ZFS本機;在飛行中-Kerberos(NFSv4),SMB加密,TLS用於網關。
PII/合規性:分割球,嚴格的權利面具,訪問審核,WORM在需要不變的地方。
可觀察性、SLO和Alerta
Метрики ФС: p95/p99 latency (read/write/open), IOPS, qdepth, cache hit, inode usage, fill-level, errors (EIO/ENOSPC).
網絡指標(NFS/SMB): retransmits/drops, RPC RTT, oplock breaks, queue length。
SLO(示例):- NFS球CI:p95 「open」/「read」 ≤ 3-5毫秒,可用性≥ 99。95%.
- SMB報告:p95目錄列表≤ 100毫秒,≤ 10 k 文件/dire。
- ZFS備份池:p99條目≤ 10毫秒,snapshot成功率為100%, RPO ≤ 15分鐘(註釋)。
- 池填充量>80/90/95%,「EIO」增長,snapshot脫落,命中率下降,頻繁的斷裂。
產品模式(iGaming/fintech)
靜態(圖標/預覽/提供商目錄):通過rsync → CDN發布;將主源存儲在具有轉換的對象中。
徽標和「原始」事件:在本地書寫(XFS/ext4)→戰鬥卸載(rclone → S3/MinIO)。
報告和PII:具有加密和嚴格ACL的SMB;帶有WORM的定期離站導出(ZFS send/recv)在接收端。
Dev環境和人工制品固定:用於Sharing的NFS/SMB;對於重型基地-塊卷+狙擊手。
內容合作:Syncthing/Nextcloud,具有驗證和配額。
實施支票
- 定義了數據類別(熱/冷/PII)、RPO/RTO和SLO。
- 選擇FS:具有正確選項的ext4/XFS/ZFS(noatime,barriers,recordsize)。
- 如果NAS:加密/簽名NFSv4/SMB、ACL、Kerberos/AD。
- Snapshots/轉化/籃子-設置和驗證恢復。
- 任務下的合成器工具:rsync(一路)、Unison/Syncthing (bi-dir)、rclone(雲)、ZFS send/recv (備份/DR)。
- FS/網絡/操作監控,burn-rate SLO,alerta ENOSPC/EIO/oplock。
- 文檔:沖突運行手冊,fsync法規,命名策略/路徑/編碼長度。
- 測試:負載配置文件(小/大文件),cat腳本(通信中斷,編輯沖突)。
典型錯誤
用於關鍵事務的一般網絡球(OLTP)而不是本地塊卷。
在應用程序中關閉路障/無fsync →失敗時數據丟失。
兩條路線的合成器沒有翻轉,並且一次→「吃掉」的變化。
在熱池→潛伏尾巴上在線顯示「discard」。
一個目錄中有數百萬個小文件→災難性的列表/備份。
SMB和NFS之間的權利/所有者混合而沒有明顯的混淆。
迷你花花公子
一路發布→邊緣服務器
1.在「/srv/builds」(本地FS)中組裝。2) `rsync -az --delete` на edge.3)CDN殘疾。
Bi-dir分析師工作文件夾
1.Syncthing/Unison,「version N days」,沖突-保留兩個版本。2)按用戶配額。3)定期離職備份。
報告目錄DR (WORM)
1.ZFS定時狙擊。2)帶有Object Lock/WORM的「send/recv」到隔離主機。3)每月恢復測試。
結果
強大的文件子系統是正確的FS+正確的日誌/障礙模式+可理解的鎖模型,有效的同步是正確的拓撲(一路/雙路),旋轉和經過驗證的工具。將解決方案捕獲到運行手冊中,自動化snapshots/復制,測量SLO並測試故障場景-因此數據將保持完整,操作過程即使在峰值負載下也是可預測的。