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의 솔루션은 활성 디스크의 파티션 테이블을 덮어쓸 필요가 없기 때문에 덜 위험해 보입니다. 거기에서는 상황이 매우 잘못될 수 있습니다.

관련 정보