img 파일 내에서 파티션을 포맷하는 방법은 무엇입니까?

img 파일 내에서 파티션을 포맷하는 방법은 무엇입니까?

img다음 명령으로 파일을 만들었습니다 .

dd if=/dev/zero bs=2M count=200 > binary.img

0이 있는 파일일 뿐이지만 이를 사용하여 fdisk파티션 테이블을 만들 수 있습니다.

# fdisk binary.img

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x51707f21.

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 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
Disklabel type: dos
Disk identifier: 0x51707f21

파티션이 있다고 가정합니다.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-819199, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-819199, default 819199): 

Created a new partition 1 of type 'Linux' and of size 399 MiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

파티션 테이블을 확인하면 다음과 같은 결과가 나타납니다.

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 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
Disklabel type: dos
Disk identifier: 0x7f3a8a6a

Device      Boot Start    End Sectors  Size Id Type
binary.img1       2048 819199  817152  399M 83 Linux

그래서 파티션이 존재합니다. gparted를 통해 파티션을 포맷하려고 하면 다음 오류가 발생합니다.

여기에 이미지 설명을 입력하세요.

왜 보이는지 모르겠고 binary.img1라이브 명령으로 파티션을 포맷하는 방법도 모르겠습니다.

ext4 파일 시스템을 사용하여 포맷하는 방법을 아는 사람이 있습니까?

답변1

루프백 기능을 통해 디스크 이미지와 개별 파티션에 액세스할 수 있습니다. 특정 디스크 유틸리티가 디스크 이미지에서 (합리적으로) 원활하게 실행된다는 사실을 발견했습니다. 그러나 mkfs그 중 하나는 아닙니다(아직도 이상하게도 mount).

출력은 다음과 같습니다 fdisk -lu binary.img.

Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...

Device           Boot Start    End Sectors  Size Id Type
binary.img1            2048 819199  817152  399M 83 Linux

생성한 파티션에 액세스하려면 몇 가지 옵션이 있습니다.

  1. 명확한 경로

    losetup --offset $((512*2048)) --sizelimit $((512*817152)) --show --find binary.img
    /dev/loop0
    

    출력은 /dev/loop0할당된 루프 장치의 이름입니다. 이 --offset매개변수는 단순히 파티션의 오프셋( Start)과 섹터 크기( 512)를 곱한 값입니다. --sizelimit오히려 파티션의 크기는 다음과 같이 계산할 수 있습니다. End-Start+1(819199-2048+1=817152), 이 숫자에 섹터 크기를 곱해야 합니다.

    /dev/loop0그런 다음 이를 파티셔닝을 위한 참조 로 사용할 수 있습니다 .

    mkfs -t ext4 -L img1 /dev/loop0
    mkdir -p /mnt/img1
    mount /dev/loop0 /mnt/img1
    ...
    umount /mnt/img1
    losetup -d /dev/loop0
    
  2. 암시적 라우팅

    losetup --partscan --show --find binary.img
    /dev/loop0
    

    출력은 /dev/loop0할당된 메인 루프 장치의 이름입니다. 또한 이 --partscan옵션은 커널이 파티션 테이블에서 장치를 검색하고 보조 루프 장치를 자동으로 할당하도록 지시합니다. 파티션을 사용하는 경우 , /dev/loop0p1해당 파티션에 대한 참조로 사용할 수도 있습니다.

    mkfs -t ext4 -L img1 /dev/loop0p1
    mkdir -p /mnt/img1
    mount /dev/loop0p1 /mnt/img1
    ...
    umount /mnt/img1
    losetup -d /dev/loop0
    

답변2

일반적으로 이를 수행하는 또 다른 방법이 있습니다 kpartx.아니요kde 관련)

sudo kpartx -a binary.img

/dev/mapper이제 모든 파티션 장치를 다음과 같이 정의해야 합니다 .루프 0p1,루프 0p2, ...

그런 다음

sudo mkfs.ext4 /dev/mapper/loop0p1

또는 완료되면 다음을 실행할 수도 있습니다.

sudo kpartx -d binary.img

loop0p를 제거하시겠습니까? 장비

답변3

왜 찾는지 모르겠어요binary.img1

(… binary.img2나중에 댓글로 묻혔습니다.)

이는 이러한 도구가 파일 이름이 특정 패턴을 따르기를 기대하기 때문입니다. 이 모드는 시스템의 실제 디스크 및 디스크 볼륨에 대해 장치 파일에서 사용되는 모드입니다.

  • 전체 디스크를 포함하는 장치 파일에는 이름이 지정됩니다 sda(또는 다른 이름으로 지정). 이것이 fdisk악용될 것으로 예상되는 것입니다.
  • 디스크의 각 슬라이스(해당 파티션으로 설명됨)에 대한 장치 파일의 이름은 sda1, sda2sda3으로 지정됩니다. 이와 같은 도구가 수행할 작업을 알려줄 때 gparted기대하는 바는 다음과 같습니다.mkfs별도의 디스크 볼륨.

물론 일반 파일은 디스크 장치 파일처럼 겹치지 않습니다. 루프백 파일 시스템과 관련된 논의는 단일 전체 디스크 이미지 파일을 가져오고 루프백을 사용하여 원하는 파티션 레이아웃을 파티션 테이블에 쓴 후 그 안에 있는 개별 슬라이스를 반영하는 파일을 생성하는 것에 관한 것 1입니다 .23

답변4

이 주제는 직접적인 관련은 없지만 동일하고 관련된 정보를 많이 언급합니다.

데비안 위키 | Raspberry Pi 및 qemu-user-static

apt이 문서에 언급된 명령 중 일부를 설치하는 데 문제가 있는 경우 apt-cache search [package_name]. 명령이 다른 이름의 패키지에서 나온 경우 결과가 나타나지 않을 수 있습니다.

예를 들어 예전에는 를 사용하여 설치할 수 있었지만 losetup이제는 Ubuntu 저장소의 일부입니다. 어떤 패키지가 다른 패키지의 컨테이너 역할을 하는지 알아내려면 Linux 배포판의 온라인 저장소를 검색하는 방법을 사용해야 합니다. 또는 다른 소스에서 설치해야 하는 경우 웹 검색 엔진을 사용하세요.losetupapt install losetuputil-linux

확인해 볼 가치가 있는 일부 패키지...

util-linux genisoimage dosfstools squashfs-tools fsarchiver xfsprogs reiserfsprogs reiser4progs jfsutils ntfsprogs btrfs-tools

각 Linux 배포판에는 자체 온라인 맨페이지도 있습니다. 때로는 튜토리얼보다 매뉴얼 페이지를 사용하는 것이 더 쉽습니다. 매뉴얼 페이지에는 모든 명령 옵션과 매개변수에 대한 정보도 나와 있습니다. 튜토리얼은 일반적으로 사용되는 내용에만 중점을 둡니다.

관련 정보