처음부터 파티션이 하나만 있는 파일 시스템()을 만들어야 합니다 /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
loop
Linux의 경우 모듈을 로드할 때 루프 장치가 분할 가능하도록 모듈에 옵션을 전달 해야 합니다 .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에서 작동하며 재부팅이 필요하지 않습니다.