btrfsは、「エラー:ターゲットデバイスがソースデバイスよりも小さい」を置き換えます。

btrfsは、「エラー:ターゲットデバイスがソースデバイスよりも小さい」を置き換えます。

私が見る理由:

btrfs replace "ERROR: target device smaller than source device"

ソースデバイスファイルシステムを次の方法でターゲットデバイスより小さく縮小した場合:

btrfs filesystem resize <devid>:<small-size> /mountpoint

答え1

ディスクを交換しようとしたときにこの問題が発生しました。少し小さいです。ソースドライブのファイルシステムのサイズを変更した後も、このエラーが発生します。ディスク全体を使用しているため、パーティションのサイズを変更できません。デバイスパスの代わりにソースドライブのデバイスを渡すのがトリックです。これにより、btrfs filesystem replaceデバイス自体のサイズではなく、ソースデバイスの実際のファイルシステムサイズを確認できるようになります。

私の初期状態:

# btrfs fi show /mnt/storage
Label: 'Storage'  uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Total devices 5 FS bytes used 15.25TiB
    devid    1 size 7.28TiB used 3.84TiB path /dev/sdb
    devid    2 size 7.28TiB used 3.84TiB path /dev/sdc
    devid    3 size 7.28TiB used 3.84TiB path /dev/sdd
    devid    4 size 7.28TiB used 3.84TiB path /dev/sde
    devid    5 size 7.28TiB used 3.84TiB path /dev/sdf

/dev/sdfを/dev/sdgに置き換えたいです。

試み#1:

# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)

/dev/sdf(devid 5) でファイルシステムのサイズを変更します。

# blockdev --getsize64 /dev/sdg 
8001546444800

# btrfs fi res 5:8001546444800 /mnt/storage
Resize '/mnt/storage' of '5:8001546444800'

試み#2:

# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)

お金を守ってください。ソースがブロックデバイスとして指定されており、ターゲットreplaceに十分なスペースがあることを確認したときにのみブロックデバイスのサイズを表示した場合に発生します。しかし、ソースコードを詳しく見てみると、replaceソースデバイスが異なる方法で処理され、実際にファイルシステムから正しいサイズが取得されることがわかりました。

これは試み#3を引き起こします。

# btrfs replace start 5 /dev/sdg /mnt/storage

以前のサイジングと組み合わせたこの式を使用すると、交換操作を正常に開始できます。

答え2

エラーメッセージはファイルシステムサイズではなくLinuxブロックデバイスサイズを示すため、ソースファイルシステムを含むパーティションはターゲットファイルシステム以下である必要があります。

ターゲットデバイスが200Gであると仮定し、ソースデバイスのサイズを199Gに調整します。

btrfs filesystem resize <devid>:199g /mountpoint

その後、パーティションサイズも199GiBに調整します。gdisk既存のソースパーティションを削除してから、同じ起動セクタで新しいパーティションを作成しましたが、入力終了セクタサイズは+199G

partprobe /dev/hdd-device新しいパーティションを再ロードした後、正常に動作replaceします。

答え3

どちらの方法も機能しているように見えますが、@rkjnsnの解決策はアクティブディスクのパーティションテーブルを上書きする必要がないため、それほど危険ではありません。そこでは状況が非常に間違っている可能性があります。

関連情報