원형 가상 디스크의 크기를 늘리는 방법은 무엇입니까?

원형 가상 디스크의 크기를 늘리는 방법은 무엇입니까?

이미지 파일을 생성했습니다 dd. 이미지에는 두 개의 파티션이 포함되어 있습니다.

가상 디스크를 만들었습니다 loop: losetup -P /dev/loop0 $image_file. 내가 만든 두 개의 파티션 loop( loop0p1, loop0p2)을 두 개의 마운트 지점에 마운트했습니다.

loop내 문제는 추가하려는 파일에 비해 디스크가 너무 작다는 것입니다 . 옵션을 살펴봤지만 losetup소용이 없었습니다.

루프디스크를 늘릴 수 있는 방법이 있나요?

답변1

대개경고하다: 파일 시스템 및 파티션 크기를 조정하면 소프트웨어 오류, 하드웨어 오류, 정전, 사람의 실수로 인해 데이터가 손실될 수 있습니다. 항상 데이터를 백업해 두십시오.

루프 장치는 물리적 디스크와 논리적으로 유사한 블록 장치입니다. 따라서 Partition Manager는 다음을 의미하지 않습니다.곧장크기를 조정하세요.

아직 찾지 못한 몇 가지 유용한 부분은 losetup -c지원되는 파일 크기가 변경될 때 루프 드라이버가 블록 장치의 크기를 업데이트하도록 하고 partprobe커널이 장치에 있는 파티션의 내부 표현을 업데이트하도록 만드는 것입니다. (GParted와 같은 GUI 파티션 관리자를 사용하는 경우 후자를 명시적으로 호출할 필요가 없을 수도 있습니다).

실제 예제를 설정해 보겠습니다.

$ fallocate -l 100M volume
$ sudo parted <<'EOT'
select ./volume
mklabel msdos
mkpart primary ext4 1MiB 50M
mkpart primary ext4 50M 100%FREE
quit
EOT
$ sudo losetup -P /dev/loop0 volume
$ sudo mkfs.ext4 /dev/loop0p1
$ sudo mkfs.ext4 /dev/loop0p2
$ mkdir mp1 mp2
$ sudo mount /dev/loop0p1 mp1
$ sudo mount /dev/loop0p2 mp2

이는 다음을 제공합니다:

$ lsblk /dev/loop0
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0  100M  0 loop
├─loop0p1 259:0    0   47M  0 part /path/to/mp1
└─loop0p2 259:1    0   52M  0 part /path/to/mp2
$ df -h /dev/loop0p*
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p1     42M  1.1M   38M   3% /path/to/mp1
/dev/loop0p2     47M  1.1M   42M   3% /path/to/mp2

그런 다음 루프 장치를 지원하는 파일을 늘리고 losetup파일 크기를 다시 읽어 용량을 업데이트할 수 있습니다 loop0.

$ fallocate -l 200M volume
$ sudo losetup -c /dev/loop0

이 두 파티션을 마운트 해제하지 않으면 해당 파티션과 포함된 파일 시스템을 해당 오른쪽의 여유 공간만큼만 확장할 수 있습니다(이는 /dev/loop0p2우리의 경우에만 가능함). 또한 파일 시스템의 크기를 조정하려면 변경된 파티션 테이블에 대해 커널에 알려야 합니다.

$ sudo parted <<'EOT'
select ./volume
resizepart 2 100%FREE
quit
EOT
$ sudo partprobe -s /dev/loop0
$ sudo resize2fs /dev/loop0p2

(두 파일 시스템을 모두 마운트 해제하면 파티션을 축소하거나 이동할 수도 있습니다.축소파티션의 경우 이러한 단계의 순서가 반대입니다. 먼저 파일 시스템의 크기를 조정한 다음 파티션의 크기를 조정하고(필요한 경우 커널에 변경 사항을 알리고) 백업 파일의 크기를 줄입니다.

마침내 얻었습니다 :

$ lsblk /dev/loop0
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0  200M  0 loop
├─loop0p1 259:0    0   47M  0 part /path/to/mp1
└─loop0p2 259:1    0  152M  0 part /path/to/mp2
$ df -h /dev/loop0p*
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p1     42M  1.1M   38M   3% /path/to/mp1
/dev/loop0p2    144M  1.6M  135M   2% /path/to/mp2

답변2

이렇게 할 수 없습니다. Linux 커널에서 루프백 장치가 작동하는 방식은 이미지 파일 크기를 사용하여 작동하고 해당 크기를 초과하여 쓰지 않는다는 것입니다.

원하는 것을 달성하는 유일한 방법은 이미지를 마운트 해제하고, 크기/파티션을 다시 늘리고, resize2fs파티션 크기를 조정하는 데 사용하는 파일 시스템을 실행한 다음 다시 마운트하는 것입니다.

관련 정보