コマンドラインでbtrfsパーティションのサイズを変更/移動する方法は?

コマンドラインでbtrfsパーティションのサイズを変更/移動する方法は?

私のラップトップにはLinux / Windowsデュアルブート設定があり、両方のシステムからアクセスできるようにほとんどのデータをWindowsパーティションに保存しました。 Windowsをほとんど使用しないため、NTFSパーティションを縮小し、btrfs形式のLinuxパーティションにデータを移動する予定でした。現在利用可能なスペースがある場所でbtrfsパーティションを拡張する必要があります。

fdisk はファイルシステムに影響を与えずにパーティションの先頭を移動できます。バージョン3.0以降、partedはファイルシステムも処理できません。

問題を解決する1つの方法は、空き領域にパーティションを作成し、それをバックアップデバイスとしてbtrfsに追加し、btrfs devicebtrfsから元のbtrfs(使用済み)テーブルとパーティションテーブルを削除し、残りのbtrfs +パーティションをパーティションの最後まで拡張することです。運転する。ここでの問題は、新しい空き容量がbtrfs内のすべてのファイルを収容するのに十分な大きさで、すべてのデータを移動する必要があることです。

だから私の質問は:まず、btrfsを拡張するよりエレガントで普遍的に適用可能な他の方法はありますか?

編集:(解決策)

GPartedは最初はファイルシステムを自動的に移動してサイズを変更できますが、空き容量があったので上記の方法を試しました。時間がかかり(サブボリュームが多いため)、CPUとI/Oリソースを多用してI/Oエラーで中断されたため、これを使用しましたが、うまく機能しbtrfs replaceました。数時間かかりました。数時間コンピュータを完全に使用できます。

答え1

いいえ、他の方法はありません。実際、最初にサイズ変更を可能にするファイルシステムはありません。

したがって、データを移動する必要がないように、プールに新しいパーティションを追加するか、説明したように続行できます。

答え2

問題を解決する1つの方法は、空き領域にパーティションを作成し、それをバックアップデバイスとしてbtrfsに追加し、btrfs devicebtrfsから元のbtrfs(使用済み)テーブルとパーティションテーブルを削除し、残りのbtrfs +パーティションをパーティションの最後まで拡張することです。運転する。ここでの問題は、新しい空き容量がbtrfs内のすべてのファイルを収容するのに十分な大きさで、すべてのデータを移動する必要があることです。

これはいくつかのステップで行うことができます。ステップ数は、ファイルシステムで使用可能な空き領域の量と関連するパーティションのサイズによって異なります。プロセスはデータを前後に移動するため、ディスクに負担をかけ、時間と労力が必要ですが、ファイルシステムは常にオンラインです。

2TB程度のデータで一度やってみました。とにかく年中無休で動作するホームルーター/サーバーにあるので、数時間ごとに確認して最終的に次のステップを開始できます。一週間以上かかった記憶がどんどん出てきますね。旅行費用は変更されることがあります。

通常、ディスク順序ではなく(一時的に)多くのパーティションを作成する必要がありますが、MBRのdosパーティションテーブルを使用して簡単に(またはまったく)実行できるかどうかはわかりません。私はGPTを使ってこれを行いましたが、あなたが使用しているタイプはこれだと思います。

ステップ:

  1. N説明したように、新しいパーティション()を古いファイルシステムに追加しますbtrfs device add … /the/mountpoint
  2. 特に、O古いパーティション()でファイルシステムを縮小しますbtrfs filesystem resize <devid>:-… /the/mountpoint。これを見つけるには、<devid>実行の正しいエントリを指定する必要があります。btrfs filesystem show /the/mountpointファイルシステムの空き容量よりはるかに小さく縮小することをお勧めします(この内容は手順11で明確になります。読み続けてください)。
  3. 終了セクタを変更して、以前のパーティションを同じ量だけ縮小します。開始セクタを変更しないでください。
  4. これで、古いパーティションの後に空き領域があります。そこ()に新しい一時パーティションを作成しますA
  5. ファイルシステムに新しい一時パーティションを追加します。
  6. 前のパーティション(サイズを調整し続けた後)がファイルシステムから削除するのに十分に小さくなるまで(ファイルシステムの空き容量と比較して)、手順2から繰り返します。このループでは、複数の一時パーティション(B、、、、...)を作成します。CD
  7. ファイルシステムから古いパーティションを削除しますbtrfs device remove /dev/… /the/mountpoint
  8. Oパーティションテーブル()から古いパーティションを削除します。
  9. N新しいパーティションをできるだけ右に展開します()。
  10. 新しいパーティションのファイルシステムサイズを最大化しますbtrfs filesystem resize <devid>:max /the/mountpoint
  11. ファイルシステムから新しいパーティションに隣接する一時パーティションを削除します。ファイルシステムに十分な空き容量がない場合、この手順は失敗する可能性があります。これが、ステップ2でファイルシステムを縮小してはいけない理由です。ファイルシステムで使用可能なスペースよりもかなり小さいパーティションを使用すると、安全性を確保できます。特に、ファイルシステムが活発に使用されていて、使用可能なスペースが変動する可能性がある場合にはさらにそうです。
  12. パーティションテーブルから新しいパーティションに隣接する一時パーティションを削除します。
  13. 一時パーティションが残っておらず、手順11を実行できなくなるまで手順9から繰り返します。

下の画像はこのプロセスを視覚化したものです。ディスクは左から右に伸び、時間は上から下に流れます。伝説:

  • O– 古いパーティション
  • N– 新しいパーティション
  • A, B, C, ... – 一時パーティション
  • -– 未割り当て領域
  • - 簡潔にするためにステップは省略されました。
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO----
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOAAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOO----AAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOBBBBAAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOO----BBBBAAAA
NNNNNNNNOOOOOOGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNOO----GGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNOOHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNN--HHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNN----GGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNNNNNGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBBBBAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN----AAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN----
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

完璧。完全なファイルシステムは、目的の場所から始まり終わるパーティション内にあります。

関連情報