표적
파일을 사용하여 처음부터 하드 드라이브 이미지를 만들려고 합니다. 여기에는 MBR, 파티션 테이블, 파티션 수 등이 포함됩니다. 그러나 나는 평생 동안 내가 만든 파티션을 Linux에서 마운트하도록 할 수 없습니다.
편집: 질문 끝의 업데이트를 참조하세요. vboxsf와 관련된 것 같습니다.
프로그램
지금까지 다양한 방법을 시도해 보았지만 가장 효과가 좋은 방법은 모두 같은 결과를 얻었습니다. 내 문제를 설명하기에 충분할 간단한 버전을 아래에 만들었습니다.
dd를 사용하여 빈 파일을 생성하거나 속도를 줄입니다.
dd if=/dev/zero of=test.img bs=1M count=150
파티션 테이블 만들기
parted -s test.img mklabel gpt
Warning: The resulting partition is not properly aligned for best performance.
파티션 만들기
parted -s test.img -- mkpart logical 0 5M
parted -s test.img set 1 bios_grub on
parted -s test.img -- mkpart logical 5M 50M
etc.
루프 장치로 설치됨(max_part=31로 루프 모듈 로드)
losetup /dev/loop0 test.img
lsblk 확인해보세요
loop0 7:0 0 150M 0 loop
├─loop0p1 7:1 0 4.8M 0 loop
├─loop0p2 7:2 0 43M 0 loop
└─loop0p3 7:3 0 4M 0 loop
지금까지는 아주 좋았습니다. 제 생각엔요. 파티션 포맷
mkfs.ext4 /dev/loop0p1
mkfs.ext4 /dev/loop0p2
mkfs.ext4 /dev/loop0p3
이제 새 파티션을 마운트해 보겠습니다.
[root@localhost vmdk test]# mount /dev/loop0p2 boot
mount: /dev/loop0p2 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
매번 여기서 끝납니다. 이미지가 생성된 직후 루프에 이미지를 마운트하고 /dev/loop0에서 parted를 호출해 보았습니다. 이는 동일한 결과를 낳습니다. Lostup을 사용하여 수동으로 오프셋을 시도했습니다. 나는 kpartx를 시도했습니다. 이 문제를 극복하는 방법을 모르겠습니다.
실제 하드 드라이브를 사용하여 이 프로세스도 시도했다는 점을 지적하고 싶습니다(가상 머신을 사용하고 있지만 무슨 뜻인지 아실 것입니다). 이 경우에는 정확히 동일한 명령을 호출하지만 /dev/sdb에 있습니다. 마지막에아무 문제 없이 /dev/sdb2를 마운트할 수 있습니다.
디버깅 정보
관련이 있는지는 모르겠지만 여기 있습니다.
[root@localhost vmdk test]# uname -a
Linux localhost.localdomain 3.10.0-327.36.2.el7.x86_64 #1 SMP Mon Oct 10 23:08:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost vmdk test]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@localhost vmdk test]# file test.img
test.img: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 307199 sectors, extended partition table (last)\011, code offset 0x0
[root@localhost vmdk test]# file -s /dev/loop0
/dev/loop0: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 307199 sectors, extended partition table (last)\011, code offset 0x0
[root@localhost vmdk test]# file -s /dev/loop0p2
/dev/loop0p2: data
[root@localhost vmdk test]# fdisk -lu /dev/loop0
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/loop0: 157 MB, 157286400 bytes, 307200 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 label type: gpt
# Start End Size Type Name
1 34 9765 4.8M BIOS boot parti logical
2 10240 98303 43M Microsoft basic logical
3 98304 106495 4M Microsoft basic logical
동일한 프로세스를 따를 때 루프 장치가 하드 드라이브와 똑같이 작동하지 않는 이유를 이해할 수 없습니다. 누구든지 아이디어가 있다면 크게 감사하겠습니다!
고쳐 쓰다
우연히도 재부팅하면 문제가 해결된 것을 발견하고 마음이 즉시 동기화되었습니다. 몇 가지 테스트를 거친 후 test.img 파일이 vboxsf 마운트(호스트와 가상 머신 간의 공유 폴더)에 배치된 경우에만 문제가 발생하는 것 같습니다. 나는 이것에 대해 실제로 생각하지 않았지만 파일 쓰기를 이상한 방식으로 캐시하는 것이 아닐까요? 지금은 질문을 열어 두겠습니다. 누군가 자세히 설명할 수 있을 것입니다.
답변1
이미지 파일이 이상한 파일 시스템(예: vboxsf)에서 호스팅되는 경우 문제가 될 수 있습니다.