.img 파일을 마운트할 수 없습니다 - "디렉토리가 아닙니다" 오류

.img 파일을 마운트할 수 없습니다 - "디렉토리가 아닙니다" 오류

우분투 12.04 시스템에서 다음 명령을 실행해 보았습니다.

sudo mount minix203.img -o loop -t minix /mnt/myminix/

minix 파티션을 사용하여 .img 파일을 마운트하려면 다음 오류가 발생합니다.

mount: Not a directory

내 명령에 문제가 있나요?

답변1

Bruce가 말한 것이 사실이라고 생각합니다. 여기에는 전체 파티션 테이블이 포함되어 있습니다. 그렇다면 여기서는 사용할 수 없는 것이 없습니다. 다음 명령의 경우 util-linux버전 2.21 이상이 필요합니다.

sudo losetup --find --show -P minix203.img

그러면 이미지가 루프백 장치에 연결되고 이미지가 연결된 루프백 장치가 표시됩니다(예 /dev/loop0: ). 가상적으로 fdisk -l /dev/loop0파티션 테이블과 장치 이름은 마운트할 수 있도록 표시되어야 합니다. 그래서 당신은 다음과 같이 끝날 것입니다 :

sudo mount /dev/loop0p1 -t minix /mnt/myminix

작동해야합니다. 이 loop옵션이 사라졌으니 losetup해당 섹션에서 작업하세요.

util-linux그러나 올바른 버전의 패키지가 없는 경우 fdisk수동으로 사용하고 수행 할 수 있습니다 losetup(또는 외부 소스에서 패키지를 설치하는 것이 더 좋습니다). 이 경우에는 몇 가지 계산만 하면 됩니다. 첫 번째는 전체 드라이브의 이미지를 첨부하는 것입니다.

sudo losetup --find --show part.img

이것은 장치 이름을 알려줄 것입니다 /dev/loop0. 그런 다음 fdisk -l파티션 레이아웃을 얻으려면 다음을 시도하십시오.

fdisk -l /dev/loop0

내 파일의 경우 다음과 같은 결과가 나타납니다.

Disk /dev/loop0: 67 MB, 67108864 bytes, 131072 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: 0x2645940b

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1            2048       63487       30720   83  Linux
/dev/loop0p2           63488      131071       33792   83  Linux

속지 마십시오. 기존 장치 이름이 아닐 수도 있습니다. 이 테이블을 사용하여 마운트할 파티션을 결정해야 합니다. 크기나 파일 시스템 유형에 따라 몇 가지 가정을 해야 합니다.

이제 계산 시간입니다. 파티션의 오프셋과 크기가 필요합니다. 섹터 크기에 단위 크기를 곱하여 결과(바이트)를 얻을 수 있습니다. 내 섹터 크기가 512바이트라는 것을 알 수 있으므로 fdisk마운트하려는 경우 /dev/loop0p1(2048 * 512)바이트에서 시작됩니다. 이는 1048576과 동일한 오프셋입니다(물론 이 예의 경우).

섹터 크기는 end_sector_number - start_sector_number + 1이 숫자를 포함하므로(최종 섹터는 해당 크기 내에 있음)입니다. 여기서는 61440 섹터 == 31457280 바이트와 같습니다. 그게 우리에게 필요한 전부입니다.

이제 루프백 장치를 분리했다가 다시 연결하여 마운트하려는 특정 파티션으로 크기를 제한할 수 있습니다(이 숫자를 원하는 것으로 바꾸십시오).

sudo loopback -d /dev/loop0
sudo loopback -f --show -o 1048576 --sizelimit 31457280 part.img

에 연결할 수 있습니다 /dev/loop0. 이제 안전하게 설치할 수 있습니다.

mount -t minix /dev/loop0 /mnt/myminix

이는 전체 드라이브의 MBR이 일반적으로 영향을 받는 상황(예: mkfs로 포맷)을 제외하고는 거의 완전히 작동해야 합니다.

어떻게 작동하나요?

MBR 파티션 테이블의 레이아웃은 간단합니다. 먼저 파티션이 시작하고 끝나는 위치에 대한 512바이트 설명과 데이터가 있습니다. 확장된 파티션의 경우 이는 다소 어려울 수 있습니다. 일반 하드 드라이브에 대해 커널이 직접 수행하는 파티션 제한을 수동으로 설정할 수 있습니다.

답변2

꽤 오래된 Minix 버전입니다.

하나 있다Google 그룹스 페이지귀하의 답변은 다음과 같습니다. 해당 기사를 인용하자면:

minix203.img에는 ​​파티션 테이블을 포함한 완전한 HD 이미지가 있습니다. 마운트는 처음에 첫 번째 파티션이 아닌 파티션 테이블을 검색합니다. 그래서 설치에 실패했습니다.

나는 최신 Minix 3 ISO 이미지에도 동일한 상황이 존재한다고 생각합니다. 설치 프로그램은 더 작은 Joliet 파일 시스템과 더 큰 Minix 파일 시스템이 있다는 것을 알고 있습니다. 따라서 ISO 이미지(루프백)를 마운트하고 콘텐츠를 볼 수는 없습니다.

답변3

이 답변은 당장 관련이 없을 수도 있지만 설문조사에서 찾았습니다. chroot 구조.

내 상황:
컴퓨터에 Ubuntu를 설치한 후 Windows를 설치했는데 부트로더(grub)가 손상되어운영 체제 감지기시스템에서 Ubuntu 이미지를 볼 수 없습니다.

내가 한 일은 다음과 같습니다.

1) Ubuntu Live CD를 사용하여 부팅합니다.

2) 디스크 관리자에서 내 볼륨의 위치를 ​​찾습니다:
root - /dev/sda6
boot - /dev/sda8

3) 임시 디렉터리 /tmp/mydir을 만들고 루트로 다음 명령을 실행합니다.

   mount /dev/sda6 /tmp/mydir
   mount --bind /proc /tmp/mydir/proc
   mount --bind /sys /tmp/mydir/sys
   mount --bind /dev /tmp/mydir/dev
   mount --bind /dev/pts /tmp/mydir/dev/pts

마지막으로 부팅 장치 /dev/sda8을 /tmp/mydir/boot 폴더에 바인딩하려고 하는데 문제가 시작됩니다.

   mount --bind /dev/sda8 /tmp/mydir/boot

다음 오류가 발생합니다.

   mount : not a directory

처음에는 이것과 이것 사이에서 조금 헷갈렸어요GitHub 기사나를 위해 해결했습니다. 이미 마운트된 장치(여기서는 /dev/sda6)에 장치(여기서는 /dev/sda8)를 마운트하려고 할 때 문제가 발생합니다. 간단히 말해서 해당 --bind옵션에는 입력으로 /dev/sda8과 같은 블록 장치가 아닌 디렉터리가 필요하기 때문에 이 작업을 수행할 수 없습니다 .

이제 좋은 소식이 왔습니다! 해결책이 있습니다. 부팅 볼륨을 /tmp의 다른 디렉터리에 마운트한 다음 이 디렉터리를 /tmp/mydir/boot에 바인딩했습니다.

    mount /dev/sda8 /tmp/booty
    mount --bind /tmp/booty /tmp/mydir/boot

이로 인해 mount : not a directory오류가 해결되었습니다.

chroot4) 나는 마지막 문제를 해결하기 위해 구조 하러 갔다 .

관련 정보