펜 드라이브에 Arch Linux를 설치했습니다유미, syslinux를 기반으로 합니다. VMware에서 USB 배포를 테스트하고 싶습니다. 작업 속도를 높이기 위해 UFD를 VMware 가상 디스크(vmdk)로 복제하고 싶습니다.
이것은 매우 간단할 수 있습니다. 물리적 UFD 드라이브, vmdk 가상 디스크 및 Arch ISO를 가상 머신에 연결했습니다. 후자에서 부팅하면 복제할 수 있습니다.
내 문제는 UFD가 매우 커서 실제 UFD에서 사용하는 섹터만 복사/복제하고 싶다는 것입니다.
사용된 섹터만 복제하는 전문 도구가 있는지 모르겠습니다. 내 생각은 vmdk 디스크를 수동으로 포맷한 다음 UFD 파일을 복사하는 것입니다.
다음 디스크 매핑을 고려하면:
Virtual vmdk disk -> sda
Physical UFD disk -> sdb
나는 다음 명령을 내렸습니다.
# Format vmdk disk as FAT32
(echo o; echo n; echo p; echo 1; echo ; echo ; echo a; echo t; echo c; echo w) | fdisk /dev/sda
mkdosfs -F 32 /dev/sda1
#Copy UFD MBR to vmdk MBR
dd if=/dev/sdb of=/dev/sda bs=446 count=1
partprobe /dev/sda
#Mount vmdk
mkdir /vmdk
mount -t vfat /dev/sda1 /vmdk
#Mount UDF
mkdir /usb
mount -t vfat /dev/sdb1 /usb
#Copy files from UFD to vmdk
cp -a /usb/* /vmdk
그 후에는 fdisk -l
다음을 제공합니다.
디스크 /dev/sda: 858MB, 858783744바이트, 1677312 섹터 단위 = 1 * 512 = 512바이트 섹터 섹터 크기(논리적/물리적): 512바이트/512바이트 I/O 크기(최소/최적): 512바이트/512 bytes 디스크 레이블 유형: dos 디스크 식별자: 0xc3072e18
장치 부팅 시작 끝 블록 ID System/dev/sda1 * 2048 1677311 837632 c W95 FAT32(LBA)
디스크 /dev/sdb: 4048MB, 4048551936바이트, 7907328 섹터 단위 = 1 * 512 = 512바이트 섹터 섹터 크기(논리적/물리적): 512바이트/512바이트 I/O 크기(최소/최적): 512바이트/512 bytes 디스크 레이블 유형: dos 디스크 식별자: 0xc3072e18
장치 부팅 시작 및 종료 블록 ID system/dev/sdb1 * 2976 7907327 3952176 c W95 FAT32(LBA)
디스크 /dev/mapper/arch_root-image: 1563MB, 1563426816바이트, 3053568 섹터 단위 = 1 * 512 = 512바이트 섹터 섹터 크기(논리적/물리적): 512바이트 / 512바이트 I/O 크기(최소/최적): 512바이트 / 512바이트
불행히도 VM을 종료하고 UFD와 ISO를 분리한 다음 시스템을 다시 시작하면 VMware는 다음과 같이 말합니다.
This is not a bootable disk...
도와주세요?
답변1
U&L Q&A에서 논의된 방법 중 하나를 사용할 수 있을 것 같습니다.공간을 확보하기 위해 VMware 이미지 파일 내의 파일을 비우는 방법은 무엇입니까?이미지를 다시 사용할 수 있도록 미리 이미지에서 사용되지 않는 공간을 없애서 이미지 크기를 줄이세요.
답변2
타르를 사용하세요. 루트 디렉터리를 압축하면 전체 시스템이 아닌 사용된 파일만 복사됩니다. 새 시스템에서는 루트 디렉터리를 교체하고 grub을 다시 설치하세요.
$ cd /
$ mkdir backups
$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups .
그런 다음 새 시스템(tar -xvpf /fullbackup.tar)에 압축을 풀고 grub을 MBR에 다시 설치하세요.
$ grub-install recheck /dev/sdX (where x is whatever your MBR is)
$ grub-update
답변3
이것은 부분적이지만 매우 흥미로운 접근 방식/솔루션이라고 생각합니다.
YUMI를 통해 Arch ISO를 UFD에 복사한 다음 USB 드라이브를 가상 디스크에 복사하는 대신 Arch ISO를 가상 디스크에 직접 복사할 수 있습니다.
Arch ISO를 사용하여 가상 머신을 부팅합니다. 여기서 가정하면 ISO를 가상 디스크에 복사하려면 sda
두 가지 가능성이 있습니다. 첫 번째는 sda
Fat32(예: YUMI UFD)를 포맷하는 것입니다.
#!/bin/sh -xv
# Partition and Format fat32 first VM disk
if (mountpoint -q /vdk); then umount /vdk; fi
echo "1,,c,*" | sfdisk /dev/sda
mkdosfs -F 32 /dev/sda1
# Mount v-disk
mkdir -p /vdk
mount -t vfat /dev/sda1 /vdk
#Copy Arch ISO files in `arch' dir to v-disk
cp -a /run/archiso/bootmnt/arch /vdk
#Install Syslinux
syslinux --directory /arch/boot/syslinux/ --install /dev/sda1
#Edit config files
cd /vdk/arch/boot/syslinux
sed -i "s|label=ARCH_.*|device=/dev/disk/by-uuid/$(blkid -o value -s UUID /dev/sda1)|" archiso_sys{32,64}.cfg
아마도 더 편리한 두 번째 방법은 Ext3을 포맷하는 것입니다.
#!/bin/sh -xv
# Partition and Format Ext3 first VM disk
if (mountpoint -q /vdk); then umount /vdk; fi
echo "1,,L,*" | sfdisk /dev/sda
mkfs.ext3 /dev/sda1
# Mount v-disk
mkdir -p /vdk
mount /dev/sda1 /vdk
#Copy Arch ISO files in `arch' dir to v-disk
cp -a /run/archiso/bootmnt/arch /vdk
#Install Syslinux
cd /vdk/arch/boot/syslinux
extlinux --install .
dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sda
#Edit config files
sed -i "s|label=ARCH_.*|device=/dev/disk/by-uuid/$(blkid -o value -s UUID /dev/sda1)|" archiso_sys{32,64}.cfg
입력을 방지하려면 보조 CD/DVD 드라이브를 가상 머신에 추가하고 이러한 스크립트를 ISO로 패키징할 수 있습니다.
Windows 사용자는 무료 VMWare Player가 mkisofs
설치 디렉토리에 포함되어 있다는 사실에 기뻐할 것입니다. 파일의 ISO를 디렉토리로 만들려면 archextra
:
# mkisofs -joliet-long -o archextra.iso archextra
답변4
질문
YUMI UFD 부트로더(Syslinux)에 하드코딩된 정보가 있는 것으로 나타나므로 다음 명령을 사용하여 가상 디스크 MBR에 복사할 수 없습니다.
dd if=/dev/sdb of=/dev/sda bs=446 count=1
해결책
Syslinux를 가상 디스크 MBR에 직접 재설치하려면 다음 명령을 사용하십시오.
syslinux --directory /multiboot --install /dev/sda1
--directory
syslinux.cfg
다른 Syslinux 구성 파일이 있는 디렉터리입니다. YUMI UFD를 간단히 살펴보면 이것이 사실임을 알 수 있습니다 multiboot
.
스크립트 솔루션
#!/bin/sh -xv
# Partition and Format fat32 first VM disk
if (mountpoint -q /vdk); then umount /vdk; fi
echo "1,,c,*" | sfdisk /dev/sda
mkdosfs -F 32 /dev/sda1
# Mount v-disk
mkdir -p /vdk
mount -t vfat /dev/sda1 /vdk
# Mount usb-disk
mkdir -p /usb
if (mountpoint -q /usb); then umount /usb; fi
mount -t vfat /dev/sdb1 /usb
#Copy files from UFD to v-disk
cp -a /usb/* /vdk
#Install Syslinux relative to YUMI config file directory
syslinux --directory /multiboot --install /dev/sda1
YUMI는 (Syslinux를 통해) Arch에 부팅 매개변수를 전달합니다 archisolabel=MULTIBOOT
. 현재 Arch는 sda
태그가 지정되지 않았 음에도 불구하고 실행됩니다 MULTIBOOT
. 어쨌든 스크립트를 더욱 강력하게 만들고 싶을 수도 있습니다.
mlabel -s -i /dev/sda1 ::MULTIBOOT
추가 조사
추가 조사를 통해 YUMI 또는 Syslinux MBR이 이식 가능하지 않은지 여부가 밝혀질 것입니다.