아무것도 아닌 파티션 하나만으로 파일 시스템을 만들어야합니다 ( /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_LINUX
in에 값을 추가하십시오 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
자세한 정보는 losetup 및 mount를 참조하십시오 .
답변
다음 절차를 통해 이미지의 파티션을 마운트하여 수정할 수 있습니다.
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에서 작동합니다.