mkfs.ext4: 장치 device.img의 잘못된 블록 오프셋=X

mkfs.ext4: 장치 device.img의 잘못된 블록 오프셋=X

내 목표는 일반 파일을 만들고 그 안에 파티션과 파일 시스템(실제로는 가상 하드 드라이브)을 만든 다음 마지막으로 마운트하는 것이었으므로 다음과 같이 했습니다.

sudo dd if=/dev/zero of=imagem-zero.img count=20480000

약 20Gb 파일을 생성합니다. 그런 다음 partition 을 사용 cfdisk하고 그 이후의 파일 상태는 다음과 같습니다.

$ gdisk -l imagem-zero.img

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk imagem-zero.img: 40960000 sectors, 19.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 544A9633-7FA3-4BE8-BEE7-612C151A4504
Partition table holds up to 128 entries
First usable sector is 2048, last usable sector is 40959966
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        16779263   8.0 GiB     8304  
   2        16779264        40959966   11.5 GiB    8302  

이제 이 두 파티션에 파일 시스템을 생성하고 싶지만 ext4질문 제목에 오류 메시지가 표시되면서 실패했습니다.

$ sudo mkfs.ext4 imagem-zero.img offset=$((2048*512))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=1048576' on device 'imagem-zero.img'

$ sudo mkfs.ext4 imagem-zero.img offset=$((2048))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=2048' on device 'imagem-zero.img'

내 질문은 두 파티션 모두에 파일 시스템을 생성하기 위한 올바른 오프셋을 어떻게 찾느냐는 것입니다.

답변1

-E스위치를 사용하는 것을 잊었습니다 !

또한 sudo꼭 필요한 경우가 아니면 사용하지 않는 것이 좋습니다.

  1. 여기에는 필요하지 않은 0이 있는 파일을 만듭니다 sudo.

    dd if=/dev/zero of=image-zero.dd count=20480000 status=progress
    
  2. cfdisk여기서는 필요하지 않지만 필요에 따라 0이 지정된 이미지를 분할합니다 .sudo

    cfdisk image-zero.dd
    
  3. 파티션에 파일 시스템을 생성하려면 다음 명령을 사용하십시오. 필요하지 않습니다 sudo.

    mkfs.ext4 image-zero.dd -E offset=$(( 512 * 2048 ))
    
  4. 일부 마운트 지점 디렉터리를 만듭니다.

    mkdir mnttest
    
  5. 이미지를 설치하려면 다음이 필요합니다 sudo.

    sudo mount -t ext4 -o offset=$(( 512 * 2048 )) image-zero.dd ./mnttest
    

Linux Mint 19에서 테스트되었습니다.


적합한 오프셋을 찾는 방법

귀하의 이미지는 다음과 같습니다:

  • 논리 섹터 크기: 512바이트

  • 첫 번째 파티션의 시작 섹터: 2048

  • 두 번째 파티션 시작 섹터: 16779264

계산하다:

논리 섹터 크기에 파티션의 시작 섹터를 곱하고 셸을 사용하여 계산해 보겠습니다.

결과:

  • 첫 번째 파티션:offset=$(( 512 * 2048 ))

  • 두 번째 파티션:offset=$(( 512 * 16779264 ))

답변2

이 옵션을 사용하여 파일 시스템을 생성 할 수 있다고 가정하면 offset=이를 어떻게 사용하시겠습니까?

맨 페이지에는 다음과 같은 내용이 있습니다.

-E 확장 옵션

파일 시스템의 확장 옵션을 설정합니다. 확장 옵션은 쉼표로 구분되며 등호("=")를 인수로 사용할 수 있습니다.

오프셋 = 오프셋

장치 또는 파일 시작 부분의 오프셋에 파일 시스템을 생성합니다. 이는 가상 머신용 디스크 이미지를 생성할 때 유용합니다.

따라서 올바른 구문은 다음과 같습니다.

sudo mkfs.ext4 imagem-zero.img -E offset=$((2048))

이를 통해 파일 시스템을 생성할 수 있지만 일부 파일을 작성하고 싶을 수도 있습니다. 따라서 순환 장비를 사용하는 것이 좋습니다.

losetup -P -f imagem-zero.img

/dev/loopX이렇게 하면 및 파티션이 제공 됩니다 /dev/loopXp0. 이러한 파티션에서 작업하고, 마운트하고, 이러한 파티션에 파일을 쓸 /dev/loopXp1수 있습니다. mkfs파티션을 마운트 해제한 후 다음을 수행하십시오.

losetup -d /dev/loopX

관련 정보