주어진 바이트 오프셋에서 파일 시스템을 생성하는 방법

주어진 바이트 오프셋에서 파일 시스템을 생성하는 방법

디스크 시작 부분에서 시작하는 btrfs가 포함된 3TB 디스크가 있습니다(예: /dev/sdx1 대신 /dev/sdx). 동시에 Luk를 사용하여 디스크를 완전히 암호화하기로 결정했지만 데이터를 가져올 여유 디스크가 없습니다. 다행히 이 디스크는 1TB 정도만 채워졌고 파일 시스템도 축소되었습니다. 바이트 오프셋으로 파일 시스템을 마운트하는 것이 가능하다는 것을 알고 있지만바이트 오프셋에서 파일 시스템을 생성하는 방법이 있습니까??

내 문제를 해결하기 위해 1.5TB 파일 시스템을 만들고 거기로 데이터를 이동하고 디스크 시작 부분의 luks 파일 시스템에 1TB btrfs를 만들고 데이터를 다시 이동하고 btrfs를 확장하고 싶습니다. 추가 디스크/공간이 필요하지 않은 다른 솔루션이 있습니까? 이 솔루션은 SSD에서 작동합니까? (호기심에서 마지막 질문입니다. 하드 드라이브가 있습니다.)

참고: 디스크의 다른 부분에 cp btrfs를 사용하겠지만 dd동일한 uid나 다른 이유로 인해 btrfs가 이를 잘 처리하지 못한다고 들었습니다.

답변1

디스크의 오프셋에 있는 파일 시스템에 액세스하는 일반적인 방법은 파티션을 사용하는 것입니다. 하지만 디스크 시작 부분에는 파티션 테이블을 위한 공간이 없기 때문에 좀 더 복잡한 접근을 해야 합니다.

당신은 그것을 사용할 수 있습니다순환 장치. 루프 장치는 주로 파일을 블록 장치로 표시하는 데 사용되지만 블록 장치가 오프셋에서 시작하고 오프셋에서 끝나도록 만들 수 있으며 기본 파일 자체가 블록 장치가 될 수 있으므로 다음과 같은 결과를 얻을 수 있습니다. 세그먼트에 해당하는 블록 장치와 동일한 효과입니다. 루프 장치를 동작시키는 명령어는 다음과 같습니다.losetup.

losetup -o 1600g /dev/loop0 /dev/sda

루프 장치가 시작되기 전에 파일 시스템이 실제로 종료되는지 확인하십시오. 그런 다음 대량으로 복사할 수 있습니다. 왜 다른 파일 시스템을 만들어야 하는지 이해할 수 없습니다.복사btrfs 파일 시스템은 동일한 시스템에 있지만이동하다하나(즉, 동시에 두 가지 모두에 액세스할 수 없음)는 가능합니다.

head -c 1100g /dev/sda >/dev/loop0
mount -r /dev/loop0 /mnt
# Check that the filesystem looks fine
umount /mnt
losetup -d /dev/loop0

적절한 호출을 사용하여 이를 수행할 수도 있지만 dd이는 오류가 발생하기 쉽습니다. 블록 장치를 먼저 설정한 다음 데이터를 섞는 경우 데이터를 삭제하기 전에 단계별로 진행하고 크기를 확인하는 것이 더 쉽습니다.

이제 파일 시스템을 이동했으므로 이 문제가 다시 발생하지 않도록 파티션을 만드십시오.

fdisk /dev/sda

위에서 전달한 것과 동일한 오프셋에서 시작하는 파티션을 만듭니다 losetup. 변경 사항을 기록하고 파티션을 마운트할 수 있는지 확인합니다.

이제 LUKS 볼륨에 대한 파티션을 생성하고 LUKS 볼륨( cryptsetup luksFormat)을 생성한 다음 btrfs 파일 시스템을 LUKS 볼륨으로 다시 이동합니다. 파일 시스템이 여전히 양호한지 확인합니다. 디스크 끝 부분의 파티션을 삭제하고 디스크 시작 부분의 파티션을 확장합니다. LUKS 볼륨( cryptsetup resize)을 확장한 다음 파일 시스템을 확장합니다.

¹ 이 작업은 쉽지만  mkfs.btrfs /dev/loop0문제에 대한 최선의 해결책은 아닙니다.

관련 정보