特定のフォルダの下のファイル変更リストには、膨大なコンテンツと複数レベルのサブフォルダがあります(優れたパフォーマンス)

特定のフォルダの下のファイル変更リストには、膨大なコンテンツと複数レベルのサブフォルダがあります(優れたパフォーマンス)

私は同じ質問をします: 特定の時間範囲内に変更されたファイルを一覧表示するには?

しかし。反転があります。

コンテンツが豊富な10個のフォルダ(13Tb)と、複数レベルのサブフォルダを含む複数のフォルダがあります。良いパフォーマンスで、各フォルダについて時間の経過とともに変更されたファイルのリストを取得したいと思います(数時間ではなく数分で返します...)。

例のディレクトリツリーは次のとおりです。フォルダストア1には、A〜Zまで26個のフォルダがあり、この26個のフォルダのそれぞれには、サブフォルダである26個のフォルダがあります。これは100レベル以上まで続きます。上記の各フォルダには、〜300 kb - 1 mbのサイズの画像が少なくとも100以上あります。

最後に、異なるデータセンターにある2つのシステムを同期させ、段階的な変更を適用したいと思います。 Rsyncを試してみましたが、変更を検出するのに数時間かかり、SLAをはるかに超えました。

一定期間に変更されたファイルのリストを照会できるタイムスタンプ付きのLinuxコマンドまたはファイル索引を要求します。これにより、単一のファイルをRsyncできます。

この作業にどんなオープンソースツールをお勧めできれば私も嬉しく思います。

ベストアンサー1

これは、選択したファイルシステムとファイルシステムがこの情報を保持する方法によって異なります。現在どのファイルシステムがありますか?必要に応じて変更できますか?

UFSやEXTなどの既存のファイルシステムがある場合は、タイムスタンプや変更に対して別々のインデックスが保持されません。変更を見つける唯一の方法は、各インデックスノードにアクセスしてタイムスタンプを確認することです。ファイルシステムが大きい場合(> 10M inode)、クエリに時間がかかります。高速ディスクがある場合は、検索を分割して複数のスレッドで実行して作業速度を少し向上させることができます。ディスクが遅い場合、またはIOPがすでに制限されている場合、マルチスレッドは何も改善しない可能性があります。

BTRFS や ZFS などの他のファイルシステムは、時間の経過とともにすべての変更の記録を保持し、これらの変更をレプリカの場所に転送できます。 rsync を使用せずに増分差分をレプリカの場所にすばやく送信できます。

例のディレクトリツリーは次のとおりです。

複数のコマンドに分割する方が簡単であることを除いて、構造はまったく重要ではありません。既存のファイルシステム(特にNFSクライアント)では、各ファイルを検索することがすべてです。これは、1つ以上の検索/再同期プロセスを実行し、完了するのを待つことを意味します。

私のファイルシステムはNFSです。

現在、NFSを使用して他のファイルシステムにアクセスしています。それがあなたができるすべてであれば、すべてのファイルにアクセスする必要があります。

一方、NFSを提供するすべてがあるかもしれません。 netappデバイスの場合は、変更されたブロックを別のnetappに送信できます(他のnetappと正しいライセンスがあるとします)。

Netappには、変更されたブロックに関する情報を収集するベンダーAPI(snapdiff)がありますが、使用することはできません。

おすすめ記事