포맷 된 파티션 이미지 파일을 처음부터 만드는 방법은 무엇입니까?


16

아무것도 아닌 파티션 하나만으로 파일 시스템을 만들어야합니다 ( /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로 포맷 된 전체 디스크가 필요하지 않으므로 기본 파티션 만 있으면됩니다.

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


루프 장치를 설정하여 의미를 명확히하고 전체 mkfs통화를 게시하십시오 . 문제를 이해하기 위해 게시물을 세 번 읽어야했습니다. 나는 당신을 도울 수 없지만, 왜 당신이 이미지 파일 (!)을 만드는지에 대해 조사되었지만 여전히 첫 n 개의 "섹터"를 사용하지 않으려 고합니다.
Bananguin

좋아, 편집했다. 부트 로더를 어딘가에 배치해야하기 때문에 처음 n 개의 섹터 (섹터에 어떤 문제가 있습니까?)를 사용하지 않고 남겨두고 싶습니다.
user35443


@MichaelMrozek 일부 Linux 배포판에는 적용되지만 우분투에는 적용되지 않는 고려 사항이 있습니다 ( loop모듈인지 커널에 내장되어 있는지 여부에 관계없이 ). 각 사이트에서 질문 버전을 갖는 것이 유용하다고 생각하며 다시 열기로 투표했습니다.
Gilles 'SO- 악의를 그만두십시오'

@MichaelMrozek 개인적으로 AskUbuntu는 Unix & Linux보다 더 구체적이라고 생각합니다. 질문이 두 가지 모두에 게시되어 있다면 여기를 닫을 특별한 이유가없는 한 AskUbuntu에있는 것은 게시 된 경우 게시해야합니다 "처음으로"게시 된 위치에 관계없이 서로 밀접하게 게시됩니다 (아마도 우분투 / 비 우분투 답변에 대한 언급 일 수 있음). 여기에 AskUbuntu에 대한 답변이 허용되지 않습니다.이 답변을 공개 IMO로 유지하는 것이 좋습니다. AskUbuntu에서 마감 투표를 할 담당자는 없지만 여기에서 질문을 다시 열기 위해 투표하고 있습니다.
CVn

답변:


20

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가 필요합니다).


치명적 : 모듈 루프가 내장되어 있으며, 최신 버전의 우분투 (12.04가 있음)를 설치하여 해결할 수 있습니까?
user35443

내장되어 있다면 modprobe가 필요하지 않습니다 loop.max_part=31. 커널 명령 행에 전달하십시오
Alex

1
아시다시피, 최근 커널을 사용하고 max_part를 전달하면 오프셋과 크기 제한이 전혀 필요하지 않습니다.
Alex

흠, 커널 명령 줄이 너무 어려워요. 여전히 감사합니다.
user35443

그것은인가 loop.maxpart=31또는 loop.max_part=31커널 명령 행에?
Cristian Ciupitu

4

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

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

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

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


흠, 오프셋이 작동합니다. 더 많은 파티션이 있다면 어떻게해야합니까?
user35443

하나의 루프 = 하나의 파티션 = 하나의 오프셋이라고 생각합니다.
Alex

음, 크기도 지정하는 옵션이 있습니까? 그래서 크기를 제한하고 더 많은 파티션을 배치 할 수 있습니까?
user35443

부분 솔루션을 사용하여 새 답변을 작성하는 내 잘못을 죄송합니다. 정답은 @ "Stephane Chazelas"입니다. 오프셋 및 크기 제한 옵션을 추가 할 수 있습니다 (그러면 내 삭제)
Alex

여기에 두지 마십시오. 내 +1은 아무데도 갈 수 없습니다.
user35443

2

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.