포맷 된 파티션 이미지 파일을 처음부터 만드는 방법은 무엇입니까? of=mountedImage.img bs=512 count=131072 fdisk mountedImage.img

아무것도 아닌 파티션 하나만으로 파일 시스템을 만들어야합니다 ( /dev/zero). 이 일련의 명령을 시도했습니다.

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

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

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

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

아무도 전체 이미지가 아닌 원시 디스크 이미지의 한 파티션 만 어떻게 포맷 할 수 있는지 알고 있습니까?



답변

Linux에서 loop모듈을 로드 할 때 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_LINUXin에 값을 추가하십시오 etc/default/grub.

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

truncate -s64M 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/

(최신 버전의 Linux가 필요합니다).


답변

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

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

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

자세한 정보는 losetupmount를 참조하십시오 .


답변

다음 절차를 통해 이미지의 파티션을 마운트하여 수정할 수 있습니다.

losetup 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"
)

kpartx

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에서 작동합니다.


답변