
펜 드라이브에 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바이트 디스크 레이블 유형: dos 디스크 식별자: 0xc3072e18
장치 부팅 시작 끝 블록 ID 시스템 /dev/sda1 * 2048 1677311 837632 c W95 FAT32(LBA)
디스크 /dev/sdb: 4048MB, 4048551936바이트, 7907328섹터 단위 = 섹터 1 * 512 = 512바이트 섹터 크기(논리적/물리적): 512바이트 / 512바이트 I/O 크기(최소/최적): 512바이트 / 512바이트 디스크 레이블 유형: dos 디스크 식별자: 0xc3072e18
장치 부팅 시작 끝 블록 ID 시스템 /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
타르를 사용하세요. 루트 디렉토리를 tarball하면 전체 시스템이 아닌 사용된 파일만 복사됩니다. 새 시스템에서 루트 디렉터리를 교체한 다음 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
이것은 부분적이지만 매우 흥미로운 접근 방식/해결책이라고 생각합니다.
Arch ISO를 YUMI를 통해 UFD에 복사하는 대신 USB 드라이브를 가상 디스크에 복사한 후 Arch ISO를 가상 디스크에 직접 복사할 수 있습니다.
Arch ISO를 사용하여 VM을 부트스트랩합니다. 여기에서 가정한 대로 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에 압축할 수 있습니다.
mkisofs
Windows 사용자는 무료 VMWare 플레이어가 설치 디렉토리에 이미 포함되어 있다는 사실을 알고 기뻐할 것입니다 . 파일의 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
. 현재는 sda
레이블이 지정되지 않았 음에도 불구하고 MULTIBOOT
Arch가 부팅됩니다. 어쨌든 다음을 추가하여 스크립트를 더욱 강력하게 만들고 싶을 수도 있습니다.
mlabel -s -i /dev/sda1 ::MULTIBOOT
추가 조사
추가 조사를 통해 YUMI 또는 Syslinux MBR이 이식 불가능한지 여부를 확인할 수 있습니다.