ファイル・システムと同期
概要
ファイルシステムは、整合性、パフォーマンス、および操作のバランスです。同期は、コンシステンシモデルと競合解決に関するものであり、単なる「コピーファイル」ではありません。"要件(p95レイテンシ、RPO/RTO、ロードタイプ)から始め、ファイルシステムとプロトコルを選択し、ログとロックを構成し、SLOを設定し、スナップショット/バージョン管理を自動化し、正しい同期ツールを使用します。
ロード用のファイルシステムの選択
ユニバーサルLinux FS
ext4は安定した仕事場です。オプション:'noatime、 nodiratime、 discard(慎重に)、data=ordered'。VMドライブ、共有ディレクトリ、CIアーティファクトに適しています。
XFS-大きなファイル/並列性(メディアコンテンツ、ログ、DWH)に強い。オプション:'noatime、 inode64';大きなファイルの場合は'reflink=1'(クローン)を設定する価値があります。
ZFS-CoW、 integrity check、スナップショット/レプリカ'send/recv'、 ARC/L2ARC、同期のためのZIL/SLOG。バックアップ、NAS、完全性の要件を備えたベースプールに最適です。
Btrfs-CoW、スナップショット/圧縮/ユーザー空間のRAID;dev/testおよびedgeの下でよい、チューニングなしでOLTPのために注意して下さい。
Windows/クロスプラットフォーム
NTFS-中小企業のために信頼できるACL、 ADS;パフォーマンスのための'DisableLastAccess'。
exFAT-リムーバブルメディア、権利とログなし(生産用ではありません)。
信頼性と速度に影響を与える設定
ログと障壁:'data=ordered'(デフォルトではext4)-バランス;'data=journal'-より安全だが遅い。書き込み障壁が有効になっていること(またはBBU/PLPを備えたコントローラ)を確認します。
fsync/sync:クリティカルスレッド(logs/transactions)は'fsync()'を明示的に呼び出す必要があります。そうでなければ事故の場合の損失は可能です。
atime: 'relatime'/'noatime'は書き込み圧力を低減します。
POSIX ACLとセキュリティラベルが必要な場合、xattr/ACL-Enable。
ブロックサイズ/レコードサイズ:ZFS 'recordsize=16K' DB;'1M'は大きい媒体のために。
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')を与える。高周波「deep」 fsync-より良いローカルディスク+非同期アンロードのためにNFSに依存しないでください。
SMB 3。x:マルチチャネル、暗号化、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-POSIX over Ceph;水平スケール、スナップショット、クォータ、分散メタデータに適しています。
GlusterFS-簡単に起動、レプリカ/シャーディングが、小さなファイルとp99できちんと。
Lustre/IBM Spectrum Scale-LDC/大容量ファイル。ネットワーク/操作が要求されます。
9P (Virtio-fs)-VM共有用であり、ハードSLOを使用した本番負荷用ではありません。
推奨事項:OLTP/ウォレット-ネットワークFSではありません。ブロックボリュームを使用します。静的コンテンツ/一般的なアーティファクト-NFS/SMB/object+CDN。
ロック、キャッシュ、一貫性
アドバイザリと必須のロック:Linuxのアドバイザリ;SMBはオプロック/リースをサポートし、ステートフルロックNFSv4サポートします。
クライアントキャッシング:攻撃的なキャッシュは読み取りをスピードアップしますが、マルチクライアントでは競合のリスクが高まります。
- 強い(ローカルFS、 ZFS)。
- Close-to-open (NFS)-'close ()/open()'時に変更が表示されます。
- 最終的な(一部の分散/オブジェクトスクリプト)。
- 営業時間:NTP/PTP;時間ドリフトは紛争解決とTTLを破ります。
同期: モデルとツール
モデル
一方通行(プッシュ/プル):アーティファクトの公開、レポートのアップロード、オフサイトバックアップ。
双方向(双方向):コラボレーション;resolverの競合とバージョン管理が必要です。
ハブとスポーク:中央ノード/クラスタ(MinIO/S3+エージェント)を介してスター。
ほぼリアルタイムvsバッチ:inotify/change logs vs周期的なウィンドウ。
ツール
rsyncは事実上の一方通行の標準です。'--delete'、 '--partial'、 '--inplace'(注意)。
rclone-S3/clouds、ハッシュチェック、サーバー側のコピー。
ユニゾン-真の双方向、紛争解決。
同期-p2p、バージョン管理、ワークフォルダに便利。
lsyncd-inotifyによるrsyncトリガー。ほぼリアルタイム。
ZFS send/recvは、スナップショット/増分(バイト効率)の完璧なシンクです。
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スナップショット(ZFS/Btrfs/CephFS):クイックロールバックポイント、分。請求書。
アプリケーションレベルのバージョン管理(Nextcloud/Syncthing/object):ユーザーに便利です。
SMB/NFSのバスケットをリサイクルする:誤った削除から保存しますが、バックアップを交換しないでください。
セキュリティとアクセス
ACLとxattr: POSIX ACL、 SMB用SID/ACE、 uid/gidマッピング。
ゲートウェイを通じて読み取り/書き込み:SFTP/HTTPS/WebDAV-SMB/NFSを外部で開くことができない場合。
暗号化:LUKS/ZFSネイティブ;飛行中-Kerberos (NFSv4)、 SMB暗号化、ゲートウェイ用TLS。
PII/コンプライアンス:ボールセグメンテーション、厳格な権利マスク、アクセス監査、必要に応じて変更不可のWORM。
オブザビリティ、SLO、アラート
ФС: p95/p99レイテンシ(読み取り/書き込み/オープン)、IOPS、 qdepth、キャッシュのヒット、inodeの使用法、塗りつぶしレベル、エラー(EIO/ENOSPC)。
ネットワークメトリック(NFS/SMB): retransmitts/drops、 RPC RTT、 oplock break、キュー長。
- NFS ball CI: p95 'open'/'read' ≤ 3-5 ms、可用性≥ 99。95%.
- SMBレポート:10k files/dirを≤すると100 ms ≤リストされるp95ディレクトリ。
- ZFSバックアッププール:p99書き込み≤ 10ミリ秒、100%スナップショット成功、RPO ≤ 15分(増分)。
- プール充填>80/90/95%、 'EIO'の成長、スナップショットの遅れ、ヒット率の低下、頻繁にoplock-break。
プロダクトパターン(iGaming/fintech)
静的(アイコン/プレビュー/プロバイダディレクトリ):rsync→CDN;元のソースをバージョン管理されたオブジェクトに保存します。
ログと「raw」イベント:ローカルに書き込み(XFS/ext4)→バッチアンロード(rclone→S3/MinIO)。
レポートとPII:暗号化と厳格なACLを備えたSMB;定期的なオフサイトエクスポート(ZFS send/recv)と受信側のWORM。
開発環境とキャプチャのアーティファクト:共有のためのNFS/SMB;重いベースの場合-ボリューム+スナップショットをブロックします。
コンテンツコラボレーション:バージョン管理とクォータによる同期/Nextcloud。
実装チェックリスト
- 定義されたデータクラス(hot/cold/PII)、 RPO/RTOおよびSLO。
- 選択したファイルシステム:正しいオプション(noatime、 barrier、 recordsize)でext4/XFS/ZFSします。
- NAS:暗号化/署名されたNFSv4/SMB、 ACL、 Kerberos/AD。
- スナップショット/バージョン管理/ごみ箱-リカバリによって構成および検証。
- タスクの打撲ツール:rsync(一方通行)、Unison/Syncthing (bi-dir)、 rclone (cloud)、 ZFS send/recv (backup/DR)。
- FS/ネットワーク/オペレーション、バーンレートSLO、 ENOSPC/EIO/oplockアラートの監視。
- ドキュメンテーション:Runbookの競合、fsyncルール、命名/パス長/エンコーディングポリシー。
- テスト:プロファイル(小/大ファイル)、カットスクリプト(切断、競合の編集)をロードします。
よくあるエラー
共有クリティカルトランザクションネットボール(OLTP)ローカルブロックボリュームの代わりに。
障害時のアプリケーション→データ損失の障害/fsyncを無効にしました。
バージョニングなしで双方向の同期と1回の時間→「食べた」変更。
ホットプールでのオンライン「破棄」→レイテンシのテール。
1つのディレクトリ内の何百万もの小さなファイル→壊滅的なリスト/バックアップ。
明示的なマッピングなしでSMBとNFS間の権利/所有者を混在させます。
ミニプレイブック
ワンウェイパブリッシングビルド→エッジサーバ
1.'/srv/builds'(ローカルファイルシステム)でのアセンブリ。2) 'rsync -az --delete'エッジ。3) CDN障害。
Bi-dir Analyst作業フォルダ
1.Syncthing/Unison、 "versioning N days'、競合-両方のバージョンを保存します。2)ユーザーごとのクォータ。3)定期的なオフサイトバックアップ。
レポートカタログDR (WORM)
1.スケジュールのZFSスナップショット。2) Object Lock/WORMを使用して隔離されたホストに'send/recv'を送信します。3)毎月の回復テスト。
[結果]
信頼できるファイルサブシステムは、正しいファイルシステム+正しいロギング/バリアモード+理解可能なブロッキングモデルであり、効果的な同期は正しいトポロジ(一方通行/双方向)、バージョン管理および実績のあるツールです。ランブックでソリューションをキャプチャし、スナップショット/レプリケーションを自動化し、SLOを測定し、障害シナリオをテストします。このようにして、データはそのままになり、ピーク時でも運用プロセスが予測可能になります。