紹介する

紹介する

パーティションの代わりにデバイスを使用するRaid 5設定があります。最近、mdデバイスのext4 fsをbtrfsに変換しました。最初はbtrfsに満足していましたが、簡単に言うとCPU周期をとって食べていてまた戻りたかったです。残念ながら、元のext4スナップショットを削除したため、復元する方法はありません。幸いなことに、データ使用量はMD機器の半分にははるかに劣るレベルです。 btrfsをスペース全体の半分未満に正常に縮小しましたが、ユーティリティが/dev/md/5を正しく表示するのに問題があります。 fdiskは正しいパーティションテーブルがないことを示し、gparted(私にとってより便利な機能)は、縮小後にのみ/ dev / md / 5を見ることができますが、読み取れず、デバイス全体を消費することを示しています。

私が今やりたいことは、btrfsをスペース全体の半分未満に減らし、その隣にext4 fsを作成してからデータをコピーすることを推測しました。これが完了したら、btrfsを削除してext4 fsを拡張してデバイスを埋めることができます。

可能ですか? mdデバイスを直接fsingするのは良くない考えのようです(この場合)。

どんな助けでも本当に感謝します。ファイルシステムを復元するために外付けドライブにお金を費やしたくありません。

よろしくお願いします!

答え1

これは可能所望の結果を得るためにディスク上のデータを再構成するが、これは多くのステップを必要とする専門家の手続きであり、熟練した人でも間違える可能性が高い。安全網もなく、許しもありません。間違いをすると、〜するデータを失います。個人的に、私はバックアップがなければこの方法を試したくありません。 (良いバックアップがある場合は、データ全体を再フォーマットしてバックアップから復元することもできます。)これはあなたの決定であり、データの価値、時間などの要因に基づいて決定されます。あなたはそれにお金を使うことができます。ちょっと待って...

まず、コメント:パーティションテーブルを含まないと言われましたが/dev/md/5、それは正常です。 MDデバイスは通常、2つの構成のうちの1つとして使用されます。 (1)以前のようにファイルシステムをMDデバイスに直接配置するか、(2)MDデバイスをLVM物理ボリューム(PV)として使用し、ボリュームがメンバーです。ボリュームの。 VG(ボリュームグループ) - ファイルシステム、スワップデバイス、VMイメージなどの論理ボリューム(LV)を任意の数だけ作成できます。後者は多くのスタッキング層のように聞こえますが、実際には一般的なLVMです。建築学。 MDデバイスにパーティションテーブルを配置することは、以前見たことがないことです。複数のLVを作成するのと同じように、MDデバイスを複数の部分に分割できますが、LVMのみを使用することもできます。また、パーティションテーブルをMDデバイスに直接配置することが自動的に機能するかどうかはわかりません。kpartx動作するには、LVMと同様に、デバイスマッパー技術を使用する同様のツールを使用する必要があります。また、LVMを直接使用します。

紹介する

実際には利用可能なサイズの半分未満を使用しているので、プロセスは/dev/md/5デバイスを半分に分割し、データを前半から後半に移動し、前半に必要な新しいタイプのファイルシステムを作成し、データを上半分に戻します。回してから2つに分割された状況から外れます。

最後に、必要な形式のデータの前半があります。最後に、この半分を拡張してデバイス全体を占めることができます。

デバイスマッパーを使用して、それぞれ大規模デバイスの半分を表す2つの仮想ブロックデバイスを作成します/dev/md/5

デバイスマッパーは、LVMが物理ボリューム(PV)の複数のブロックとフラグメントを論理ボリューム(LV)にマッピングするために使用するのと同じテクノロジです。線形マッピングタイプの場合、これはソースデバイス、ソースオフセット、およびターゲット長を指定することによって実行されます。 (device-mapperには他のタイプのマッピングもありますが、これについては説明しません。)違いは、LVMがこれらのマッピングを自動的に管理および追跡し、それをPVにヘッダーとして格納されているメタデータに継続的に保存することです。また、バッチ情報(オフセットとサイズ、複数のブロック...)を自動的に透過的に選択します。オフセットとサイズを手動で厳密に制御する必要があり、最初に/dev/md/5PVメタデータヘッダーを挿入するスペースがないため、LVMを使用して操作を実行することはできません。だから私たちはdmsetupコマンドを介して直接デバイスマッパーを使用します。

婦人声明

まだこのプロセスを試していません。原則としてはうまくいくはずですが、間違いを犯している可能性があります。私が間違いをしたり、あなたが間違いを犯した場合、あなたのデータは失われます。

プログラム

  1. /dev/md/5デバイスの半分以下を占めるようにBtrfsファイルシステムのサイズを変更します。blockdev --getsize64 /dev/md/5学習に使用正確にデバイスに含まれるバイト数は、Btrfsファイルシステムを半分未満にします。大きくするよりも小さくする方が良いです。デバイスの半分未満を占めても大丈夫ですが、1バイトを超えると大丈夫ではありません。

    btrfs filesystem resize <devid>:<half>
    

    <devid>サイズ変更するBtrfsメンバーデバイスのID。を使用して分割を表示できますbtrfs filesystem show /mountpoint。このプロセス中に、メンバーデバイスが1つしかないBtrfsファイルシステムを使用することが予想されます。

    half報告されたバイト数の半分ですblockdev --getsize64 /dev/md/5。確実にするために四捨五入してより多く引いてください。

    このコマンドには時間がかかります。すぐに戻ってバックグラウンドで実行するのか、それともフォアグラウンドで実行しているのかわかりません。 Btrfsの私の経験によると、Btrfsは前景で実行されます。どちらにしても、カーネルログを確認して、ジョブが完了したことを示すマークが付いていることを確認してください。

  2. Btrfsファイルシステムのサイズを再確認してください。

    btrfs filesystem show /mountpoint
    

    sizeの半分未満であることを確認してください/dev/md/5。このコマンドは、GB単位のサイズを小数点以下2桁まで表示します。丸めか丸めかわからないので、前のステップでいくつかの余白を差し引いて、実際にここに示されている値が次より小さいことを確認してください。デバイスサイズの半分。

  3. これで、次のような状況が発生します。

    |*********---------| /dev/md/5
    

    どこ*には使用されているスペースであり、-は使用されていないスペースであり、|--|ブロックデバイスの範囲を表します。

    デバイス後半の最初のセクタ数を計算します。

    デバイスマッパーセクタは512バイトなので、出力から始まりblockdev --getsize64 /dev/md/5512で割ります。のセクタ数です/dev/md/5

    その数を2で割ります。丸めます。この番号に電話してください<half>

    前半と後半をそれぞれマッピングする仮想ブロックデバイスを作成します。

    dmsetup create half2 --table '0 <half> linear /dev/md/5 <half>'
    

    今、以下があります。

    |*********---------| /dev/md/5
              |--------| /dev/mapper/half2
    
  4. /dev/mapper/half2 に一時ファイルシステムを作成します。

    mkdir /mnt/tmp
    mkfs.ext4 /dev/mapper/half2
    mount /dev/mapper/half2 /mnt/tmp
    
  5. すべてをコピー

    rsync -avXSH /btrfs-mountpoint/ /mnt/tmp
    

    (お気に入りのコピーツールを使用してください。通常のコピーツールもcp機能します。)

  6. これで、Btrfsファイルシステムを削除する時間です。

    umount /btrfs-mountpoint
    
  7. 別のデバイスマッパーマッピングの作成

    dmsetup create half1 --table '0 <half> linear /dev/md/5 0'
    

    今、以下があります。

    |---------*********| /dev/md/5
    |--------|           /dev/mapper/half1
              |********| /dev/mapper/half2
    

    内側には*使用された空間があり、-以前に使用していた空間ですが、後半に移動させて余裕を与えて上書きしようとします。

  8. 必要な最終構成を作成します/dev/mapper/half1。 ext4ファイルシステムを直接作成することもできますが、LVMをお勧めします。

    直接:

    mkfs -t ext4 /dev/mapper/half1
    

    LVM:

    pvcreate /dev/mapper/half1
    vgcreate volume-group-name /dev/mapper/half1
    lvcreate -n logical-volume-name -L<size> volume-group-name
    mkfs -t ext4 /dev/volume-group-name/logical-volume-name
    
  9. インストールしてすべてをコピーします。

    mount /dev/volume-group-name/logical-volume-name /new-mountpoint
    # or
    mount /dev/mapper/half1 /new-mountpoint
    
    rsync -avXSH /mnt/tmp/ /new-mountpoint
    
  10. 一時的なものをすべて削除します。

    umount /mnt/tmp
    dmsetup clear /dev/mapper/half2
    umount /new-mountpoint
    
    # If using LVM
    lvchange -a n /dev/volume-group-name/logical-volume-name
    vgchange -a n volume-group-name
    
    dmsetup clear /dev/mapper/half1
    

    デバイスマッパーマッピングを消去できない場合は、問題を解決または再開できます。

    次の内容に戻りました。

    |*********---------| /dev/md/5
    
  11. 次に、/dev/md/5デバイス全体を使用して再インストールしてください。

    # If using LVM
    vgscan
    mount /dev/volume-group-name/logical-volume-name /new-mountpoint
    
    # otherwise
    mount /dev/md/5 /new-mountpoint
    
  12. これでデバイス全体に拡張できます。

    # If using LVM
    pvresize /dev/md/5
    # Optionally, enlarge the LV
    
    # otherwise
    resize2fs /dev/md/5
    

うわー!

関連情報