포맷된 파티션 이미지 파일을 처음부터 어떻게 생성합니까?

포맷된 파티션 이미지 파일을 처음부터 어떻게 생성합니까?

처음부터 파티션이 하나만 있는 파일 시스템()을 만들어야 합니다 /dev/zero. 나는 다음과 같은 일련의 명령을 시도했습니다.

dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
    n
    p 
    2048
    131072

기본적으로 0으로 채워진 64MB 이미지 파일을 만들어야 합니다. 그런 다음 섹터부터 시작하여 나머지 모든 섹터를 사용하여 fdisk새 파일 시스템(결국 FAT32가 되어야 함)에 대한 새 파티션을 추가합니다 .2048

losetup /dev/loop1 mountedImage.img
mkfs -t vfat /dev/loop1

하지만 여기에 문제가 있습니다. loop장치를 설정하고 포맷을 사용하면 mkfs -t vfat파티션 테이블이 덮어쓰여지고 파일 시스템(FAT32)이 디스크에 배치됩니다. 전체 디스크를 FAT32로 포맷할 필요는 없으며 기본 파티션만 포맷하면 됩니다.

전체 이미지가 아닌 원시 디스크 이미지의 한 파티션만 포맷하는 방법을 아는 사람이 있습니까?

답변1

loopLinux의 경우 모듈을 로드할 때 루프 장치가 분할 가능하도록 모듈에 옵션을 전달 해야 합니다 .max_part

현재 값을 확인하십시오.

cat /sys/module/loop/parameters/max_part

0인 경우:

modprobe -r loop # unload the module
modprobe loop max_part=31

이 설정을 지속되게 하려면 /etc/modprobe.conf파일에 다음 줄을 추가하십시오( /etc/modprobe.d디렉토리가 시스템에 있는 경우).

options loop max_part=31

modprobe -r loop"모듈 루핑이 내장되어 있기 때문에" 실패하는 경우 loop.max_part=31커널 명령줄에 추가하고 재부팅해야 합니다. 부트로더가 Grub2인 경우 이를 GRUB_CMDLINE_LINUX값에 추가 /etc/default/grub하고 update-grub.

이제 분할 가능한 루프 장치를 만들 수 있습니다.

truncate -s 64M file # no need to fill it with zeros, just make it sparse
fdisk file # create partitions
losetup /dev/loop0 file
mkfs.vfat /dev/loop0p1 # for the first partition.
mount /dev/loop0p1 /mnt/

사용 후 순환장치를 제거 및 분리

umount /mnt
losetup -d /dev/loop0

(비교적 새로운 버전의 Linux가 필요합니다.)

답변2

losetup /dev/loop0 file -o 1048576 --sizelimit limit

지정된 오프셋은 바이트 단위여야 합니다(1048576 = 2048 섹터 * 섹터당 512바이트).

mount -o loop,offset=1048576,sizelimit=limit

자세한 내용은 다음을 참조하세요.설정이 손실되었습니다.그리고.

답변3

ext4 파일 시스템과 GPT 파티션 이미지를 사용한 간단한 예입니다.

truncate -s 100MiB mountedImage.img

GPT 테이블 만들기

parted mountedImage.img mklabel gpt

파티션 P1 생성

parted mountedImage.img mkpart primary ext4 2MiB 30MiB

파티션 P2 생성

parted mountedImage.img mkpart primary ext4 30MiB 60MiB 

파티션 P3 생성

parted mountedImage.img mkpart primary ext4 60MiB 99MiB

/dev/loop1루핑 장치 (가급적 sudo losetup -f무료 루핑 장치)를 사용한다고 가정합니다 .

losetup /dev/loop1 mountedImage.img-> 장치가 생성된 파티션은 /dev/loop1px각 파티션이 x파티션 번호를 나타내는 것처럼 열거되어야 합니다.

[사용] mkfs.ext4 /dev/loop1px-> 파티션 번호에서 작동x

[그리고 아님] mkfs.ext4 /dev/loop1 -> 파티션 테이블만 삭제합니다.

참고: 이미지의 파티션은 모듈이 다중 파티션으로 구성된 경우에만 루프 장치에 표시됩니다.

제 블로그 링크를 참고해주세요,Linux에서 처음부터 GPT 파티션 이미지 만들기, GPT를 사용하여 처음부터 파티션 이미지를 생성합니다.

답변4

다음 절차를 사용하면 이미지의 파티션을 마운트하고 수정할 수 있습니다.

Lostup 2.21 -P 옵션

losetup -P -f --show my.img

/dev/loopXpY파티션당 하나씩 만듭니다.

장점: 실행 파일(util-linux 패키지)은 많은 배포판에 사전 설치되어 있습니다.

단점: 이것은 최근 옵션이며 Ubuntu 14.04에는 존재하지 않습니다.

losetup -P오토메이션

용법:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

원천:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

파텍스

sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper

산출:

/dev/mapper/loop0
/dev/mapper/loop0p1

loop0p1첫 번째 파티션은 어디에 있으므로 다음과 같이 할 수 있습니다.

mkdir -p d
sudo mount /dev/mapper/loop0p1 d

이 방법의 장점: Ubuntu 14.04에서 작동하며 재부팅이 필요하지 않습니다.

관련 정보