파일 기반 디스크 이미지의 크기를 확장 할 수 있습니까?


29

dd를 사용하여 빈 디스크 이미지를 만든 다음 mkfs를 사용하여 실제 파일 시스템 이미지로 만들었습니다. 나는 잘 장착하고 사용하고 있습니다. 필요한 경우이 파일 기반 디스크 이미지를 확장하거나 축소 할 수 있어야합니다. 그런 식으로 디스크 이미지의 크기를 늘릴 수 있습니까? 이 파일 기반 디스크 이미지가 가상 머신 드라이브에서 볼 수있는 것과 같은 동적 크기 조정 기능을 갖도록하는 방법이 있습니까?

답변:


26

먼저 이미지 파일을 만들어야합니다.

# dd if=/dev/zero of=./binary.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 10.3739 s, 101 MB/s

그런 다음 그 위에 파티션을 생성해야합니다 - 당신은 당신이 원하는대로 도구를 사용할 수 있습니다 fdisk, parted, gparted, 내가 선호하는 parted, 그래서 :

# parted binary.img

먼저 파티션 테이블을 만든 다음 하나의 큰 파티션을 만들어야합니다.

(parted) mktable                                                          
New disk label type? msdos      

(parted) mkpartfs
WARNING: you are attempting to use parted to operate on (mkpartfs) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Partition type?  primary/extended? primary
File system type?  [ext2]? fat32
Start? 1
End? 1049M

이제 보자 :

(parted) print
Model:  (file)
Disk /media/binary.img: 1049MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1049MB  1048MB  primary  fat32        lba

좋아 보인다

확대하려면 dd를 사용하여 이미지에 0을 추가하십시오.

# dd if=/dev/zero bs=1M count=400 >> ./binary.img
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 2.54333 s, 165 MB/s
root:/media# ls -al binary.img 
-rw-r--r-- 1 root root 1.4G Dec 26 06:47 binary.img

이미지에 400M이 추가되었습니다.

# parted binary.img 
GNU Parted 2.3
Using /media/binary.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model:  (file)
Disk /media/binary.img: 1468MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1049MB  1048MB  primary  fat32        lba

보시다시피 이미지의 크기가 다릅니다 (1468MB). 이미지에서 여유 공간을 표시 할 수도 있습니다. 당신이 그것을보고 싶다면 print free대신에 입력하십시오 print. 이제 파일 시스템에 추가 공간을 추가해야합니다.

(parted) resize 1
WARNING: you are attempting to use parted to operate on (resize) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Start?  [1049kB]?
End?  [1049MB]? 1468M

확인하십시오 :

(parted) print
Model:  (file)
Disk /media/binary.img: 1468MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1468MB  1467MB  primary  fat32        lba

꽤 좋은. 축소하려면 비슷한 작업을 수행하십시오.

(parted) resize 1
WARNING: you are attempting to use parted to operate on (resize) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Start?  [1049kB]?
End?  [1468MB]? 500M

이제 파티션이 더 작은 지 확인할 수 있습니다.

(parted) print
Model:  (file)
Disk /media/binary.img: 1468MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size   Type     File system  Flags
 1      1049kB  500MB  499MB  primary  fat32        lba

그렇습니다.

데이터가있을 때 파티션 크기를 조정하려고하면 데이터를 너무 많이 축소하면 오류가 발생하므로 데이터 크기에주의해야합니다.

Error: Unable to satisfy all constraints on the partition

파일 시스템을 축소 한 후 일부 파일을 잘라 내야합니다. 그러나 이것은 까다 롭습니다. 500M (END)에서 가치를 얻을 수 있습니다.

# dd if=./binary.img of=./binary.img.new bs=1M count=500

그러나 이것은 파일의 끝에 약간의 공간을 남겨 둡니다. 왜 그런지 잘 모르겠지만 이미지가 작동합니다.

이러한 이미지를 마운트하는 데는 한 가지가 있습니다. mount 명령으로 전달하려면 오프셋을 알아야합니다. fdisk와 같은 오프셋을 얻을 수 있습니다.

# fdisk -l binary.img

Disk binary.img: 1468 MB, 1468006400 bytes
4 heads, 32 sectors/track, 22400 cylinders, total 2867200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f0321

     Device Boot      Start         End      Blocks   Id  System
binary.img1            2048     2867198     1432575+   c  W95 FAT32 (LBA)

2048 (시작) x 512 (섹터 크기) = 1048576이므로 이미지를 마운트하려면 다음 명령을 사용해야합니다.

# mount -o loop,offset=1048576 binary.img /mnt

1
"하지만 파일 끝에 약간의 공간이 남습니다. 이유는 확실하지 않지만 이미지는 작동합니다." 다른 측정 단위를 사용하고 있기 때문에 발생한다고 생각합니다. parted는 500MB (parted 1MB는 ​​1000 * 1000 바이트)이므로 500000000 바이트입니다. dd에서 1Mx500 = 500M을 복사합니다. 여기서 M은 1024 * 1024 바이트를 나타내므로 524288000 바이트를 복사합니다. 차이점은 파일 끝에 남은 공간이어야합니다. 여기서 수정하려면 softwarebakery.com/shrinking-images-on-linux에 설명 된대로 잘라내기를 수행 하거나 측정 단위를 변경할 수 있습니다. 부분적으로 또는 dd
ste

지금은 사용 무관의 partedresize: "오류 : 크기 조정 명령은 헤어진 3.0에서 제거되었습니다"
Abdillah

15

예, 가능합니다. 파티션처럼 작동합니다. 나는 다음을 시도했다.

원본 파일을 만들고 마운트하고 확인하고 마운트 해제하십시오.

dd if=/dev/zero of=test.file count=102400 
mkfs.ext3 test.file 
mount test.file /m4 -o loop
df
umount /m4

자라

dd if=/dev/zero count=102400 >> test.file
mount test.file /m4 -o loop
df
resize2fs /dev/loop0
df

파일 축소가 비슷하게 작동하지 않는 이유는 없지만 파일 축소는 항상 파일 증가보다 어렵습니다 (물론 블록 장치가 마운트되지 않은 경우 수행해야 함).

qemu-nbd를 사용하여 qcow2 이미지를 마운트하는 방법에 대해 설명하는 이 링크 를 살펴보십시오.


좋아, 이것은 내가 필요한 레시피입니다. 그러나 e2fsck -f test.file크기를 조정하기 전에 이미지 파일 에서 실행해야했습니다 . 또 다른 것은 NTFS 파티션에 저장된 드라이브 이미지에 70G를 추가하는 dd ... >> drive_image데 약 10 분이 걸릴 수 있습니다.
Tomasz Gandor

Tomasz : seek=다른 답변 의 dd 매개 변수 사용
Willem

6

스파 스 파일은 동적 증가 / 크기 조정 디스크 이미지에 적합합니다.

1024M 스파 스 파일이 생성됩니다.

# dd if=/dev/zero of=sparse.img bs=1M count=0 seek=1024
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000565999 s, 0.0 kB/s

이미지가 디스크 공간을 사용하지 않습니다.

# du -m sparse.img
0   sparse.img

겉보기 크기는 1024M입니다.

# ls -l sparse.img
-rw-rw-r--. 1 root root 1073741824 Sep 22 14:22 sparse.img

# du -m --apparent-size sparse.img
1024    sparse.img

일반 디스크 이미지로 포맷하고 마운트 할 수 있습니다.

# parted sparse.img 
GNU Parted 2.1
Using /tmp/sparse.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable                                                          
New disk label type? msdos                                                
(parted) mkpartfs                                                         
WARNING: you are attempting to use parted to operate on (mkpartfs) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Partition type?  primary/extended? primary                                
File system type?  [ext2]? fat32                                          
Start? 1                                                                  
End? 1024M                                                                
(parted) print                                                            
Model:  (file)
Disk /tmp/sparse.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1024MB  1023MB  primary  fat32        lba

# du -m sparse.img 
2   sparse.img

이제 동일한 명령을 사용하여 크기를 조정하여 새로운 크기의 이미지로 seek 매개 변수를 변경하면됩니다.

dd if=/dev/zero of=sparse.img bs=1M count=0 seek=2048

보시다시피 이미지는 이제 2048M이며 선택한 부분 또는 다른 도구를 사용하여 파티션을 확대 할 수 있습니다.

# du -m --apparent-size sparse.img 
2048    sparse.img


# parted sparse.img 
GNU Parted 2.1
Using /tmp/sparse.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print free                                                       
Model:  (file)
Disk /tmp/sparse.img: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
        16.4kB  1049kB  1032kB           Free Space
 1      1049kB  1024MB  1023MB  primary  fat32        lba
        1024MB  2147MB  1123MB           Free Space

(parted)                               

# du -m sparse.img 
2   sparse.img

이제 즐기세요!


잘 했어요 스파 스 파일이 제대로 사용되지 않는다고 생각합니다.
TonyH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.