파일에 디스크 장치 생성

파일에 디스크 장치 생성

다음 명령을 사용하여 파일에 디스크 장치를 생성하려고 합니다.

dd if=/dev/zero of=file.img bs=516096 count=1000
sudo losetup /dev/loop0 file.img
(echo n; echo p; echo 1; echo ""; echo ""; echo w;) | sudo fdisk -u -C1000 -S63 -H16 file.img
sudo mke2fs -b1024 /dev/loop0 503968

감사합니다. 설치했습니다:

sudo mkdir /mnt/fcd
sudo mount -t ext2 /dev/loop0 /mnt/fcd

그리고 자체 작성 부트로더를 작성합니다.

sudo dd if=loader.bin of=file.img bs=512 count=1 conv=notrunc

다음 명령을 사용하여 제거하십시오.

sudo umount /dev/loop0
sudo losetup -d /dev/loop0

두 가지 질문이 있습니다.

1.fdisk에서 다음과 같은 출력을 얻습니다.

Using default response p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-1007999, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1007999, default 1007999): 

첫 번째 섹터가 0이 아닌 2048에서 시작하는 이유는 무엇입니까? ext2 또는 다른 것의 MBR에 0-2048이 사용됩니까?

2. 디스크를 생성한 후 다음을 실행합니다.

fdisk -l file.img

출력은 다음과 같습니다.

Disk file.img: 516 MB, 516096000 bytes
255 heads, 63 sectors/track, 62 cylinders, total 1008000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System

왜 칸막이가 없나요?

감사해요.

답변1

1.- 처음에 fdisk는 파티션을 실린더 경계에 정렬하려고 파티션을 생성하고 MBR, 파티션 테이블 및 기타 항목에 사용될 디스크의 첫 번째 실린더를 비워 둡니다. 따라서 첫 번째 파티션은 일반적으로 블록 63에서 시작됩니다(각 블록은 512바이트). RedHat 6.x와 같은 배포판의 fdisk는 여전히 이런 방식으로 작동하지만 경고를 표시하고 DOS가 아닌 호환 모드를 선택할 수 있도록 합니다.

최신 fdisk 버전에서는 MB 경계에 맞춰 정렬된 파티션을 생성하여 파티션 페이지 정렬을 보장합니다. 이는 성능에 큰 영향을 미칠 수 있습니다. 이에 대해 궁금하신 경우 제 블로그에서 자세한 내용을 읽어보실 수 있습니다.http://sinrega.org/?p=14그리고http://sinrega.org/?p=13). 2048은 1MB(2048*512)입니다.

2.- 파일 지원 장치에 ext2 파일 시스템을 생성하면 파티션 테이블을 덮어씁니다. 파티션을 생성한 후 생성한 파티션과 동일한 블록에서 시작하는 다른 루프 장치를 연결해야 합니다. 귀하의 경우 파티션은 2048에서 시작하므로 오프셋은 1048576(2048 * 512)이어야 합니다.

losetup -o 1048576 /dev/loop1 file.img
mkfs.ext2 /dev/loop1
mount /dev/loop1 /mnt
# Do whatever you want with the partition here
umount /mnt
losetup -d /dev/loop1
losetup -d /dev/loop0

이것은 트릭을 수행해야합니다.

답변2

sfdisk+mke2fs

이는 이 두 도구와 신중한 오프셋 계산을 결합하여 수행할 수 있습니다.

이 작업은 sudo 없이도 수행할 수 있습니다.

여기서는 최소한의 실행 가능한 예를 설명합니다.https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819

관련 정보