ディレクトリの内容をディスク全体に均等に配布します。最も近い最上位ディレクトリに丸めます。

ディレクトリの内容をディスク全体に均等に配布します。最も近い最上位ディレクトリに丸めます。

私は音楽カタログと2つのSDカードスロットを持つMP3プレーヤーを持っています。このディレクトリの内容は、1枚のカードに入れるには大きすぎて2つに分けたい。

私は物をアルファベット順に整理するのが好きです。 SD1を埋めてSD2セクションを空白のままにしておくと、新しい音楽を追加するたびにSD2に新しい項目を追加してアルファベット順を破るか、周囲のすべての項目を再調整する必要があります。

もう一つのことは、私のカタログがアーティスト別にグループ化されているため、特定のアーティストの新しいアルバムをSD1に受け取ると合わないということです。

簡単に言えば、両方のカードはほぼ同じ量の充填を望んでいる。

今私の解決策は本当に大丈夫です。

  1. ディレクトリを一覧表示し、リストをファイルに出力します。
  2. ファイルを開き、中点を見つけます。 (これを行うための賢い方法があると確信していますが、vimで手動で実行するのは高速です。)
  3. リストの下半分を切り取り、2番目のファイルに貼り付けます。
  4. rsync --files-from=SD1の1つのファイルとSD2の次のファイルとして実行します。ミッション完了!

しかし、両方のSDカードがより均等に満たされるように、これを行うより正確な方法がないかと思いました。あなたは何をしますか?

私の考えでは、私がしなければならないと思います。

  1. 音楽ディレクトリから実行duしてtotalSize
  2. その後、各アーティストディレクトリを繰り返してサイズを確認し、累積合計を維持します。
  3. 合計を超えた場合は、totalSize * 0.5計算したすべてのディレクトリのリストを出力して前半を取得し、残りを2番目のファイルに入れて残りの半分を取得しますか?
  4. ファイルで同じrsyncを実行する

誰でも良い考えがありますか?

ベストアンサー1

だからやや皮肉なことに、これは本物2つのSDカードが同じネットワーク上の2つの別々のコンピュータにある場合、これは簡単に実行できます。これは、必要な作業を正確に実行できるさまざまなクラスター型ストレージソリューションがあるためです。

しかし、これが非常に現実的なオプションではないことを考慮すると(クラスタファイルシステムを使用するのは過剰です)、おそらく最良のオプションはmhddfsというプログラムです。公式ホームページロシア語になっていますが、良い記事があります。ここそれに関しては、さまざまなディストリビューションがパッケージで提供されます。デフォルトではファイルレベルのRAIDを実行します。ここで最大の利点は、mhddfsマウントを設定した後に実際にrsync一度だけ呼び出すことです。各ファイルは完全に1つのファイルシステムに保存され、ファイルシステム全体にわたる展開をインテリジェントに管理します。また、プライマリデバイスにはどの状態も保存しないため(デバイスのデータ分布を見て、新しく作成されたファイルを保存する場所を特定し、すべてのファイルに既存のファイルがあるかどうかを正しく確認する)、データの無駄はありません。 。空間も同じだ。

おすすめ記事