Live USB Arch 배포를 VMware 가상 디스크에 수동으로 복제

Live USB Arch 배포를 VMware 가상 디스크에 수동으로 복제

펜 드라이브에 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두 가지 가능성이 있습니다. 첫 번째는 sdaFat32(예: 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

--directorysyslinux.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이 이식 가능하지 않은지 여부가 밝혀질 것입니다.

관련 정보