손상된 USB 플래시 드라이브에 라이브 이미지를 구울 수 있나요?

손상된 USB 플래시 드라이브에 라이브 이미지를 구울 수 있나요?

불량 블록이 있는 16G 플래시 드라이브가 있습니다.

# f3read /media/morfik/224e0447-1b26-4c3e-a691-5bf1db650d21
                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.h2w ... 2097112/       40/      0/      0
Validating file 2.h2w ... 2097120/       32/      0/      0
Validating file 3.h2w ... 2097098/       54/      0/      0
Validating file 4.h2w ... 2097148/        4/      0/      0
Validating file 5.h2w ... 2097114/       38/      0/      0
Validating file 6.h2w ... 2097152/        0/      0/      0
Validating file 7.h2w ... 2097152/        0/      0/      0
Validating file 8.h2w ... 2097152/        0/      0/      0
Validating file 9.h2w ... 2097152/        0/      0/      0
Validating file 10.h2w ... 2097152/        0/      0/      0
Validating file 11.h2w ... 2097152/        0/      0/      0
Validating file 12.h2w ... 2097152/        0/      0/      0
Validating file 13.h2w ... 2097152/        0/      0/      0
Validating file 14.h2w ... 2097152/        0/      0/      0
Validating file 15.h2w ...   90664/        0/      0/      0

  Data OK: 14.05 GB (29450624 sectors)
Data LOST: 84.00 KB (168 sectors)
             Corrupted: 84.00 KB (168 sectors)
      Slightly changed: 0.00 Byte (0 sectors)
           Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 18.77 MB/s

보시다시피 처음 5개 쇼에만 손상된 섹터가 있습니다. 나머지는 괜찮습니다. 문제는 이 펜 드라이브에 라이브 이미지를 구우려고 할 때 50MiB가 전송된 후 작업이 중지된다는 것입니다.

처음부터 5G를 건너뛰고 손상된 공간 뒤에 미러를 넣어서 정상적으로 부팅할 수 있는 방법이 있나요?

답변1

드라이브 시작 부분에 GRUB(또는 다른 부트 로더)를 설치할 공간이 충분하고 LiveCD가 루프 마운트 ISO를 지원하는 경우 불량 블록이 매핑된 파일 시스템을 생성하거나 파티션을 나누어 문제를 방지할 수 있습니다. 우선 불량 블록이 발생합니다.

grub.cfgUbuntu Live CD의 부팅 항목 예:

menuentry "Ubuntu 15.04 Desktop amd64" {
    set isofile="ubuntu-15.04-desktop-amd64.iso"
    loopback loop (hd0,msdos3)/$isofile
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/$isofile noprompt noeject
    initrd (loop)/casper/initrd.lz
}

그래서 GRUB2는 너무 이상해서 ISO 파일에서 직접 커널과 initramfs를 추출하기도 합니다. 그러나 ISO 외에도 직접 루프 마운트하고 커널 및 initramfs 파일을 독립적으로 복사하면 이 기능은 완전히 중복됩니다. 따라서 시스템에 /boot커널, initramfs 및 iso 파일이라는 세 개의 파일이 있습니다.

이를 통해 원하는 부트로더를 사용할 수 있으므로 다른 부트로더에서는 다음과 같이 보일 수 있습니다.

linux vmlinuz.efi boot=casper iso-scan/filename=ubuntu-15.04-desktop-amd64.iso noprompt noeject
initrd initrd.lz

루프 설치 및 iso 파일 검색은 Live CD의 initramfs 자체에서 처리되기 때문에 매개변수는 CD 스타일마다 다릅니다.

일반적으로 이 기술은 단일 USB 메모리 스틱에 많은 수의 Live CD를 넣는 데 사용됩니다. 또한 불량 블록 영역을 방지하기 위해 발생합니다(올바르게 분할/포맷된 경우).

답변2

이 문제를 성공적으로 해결했지만 더 좋고 간단한 솔루션이 있는지 여전히 궁금합니다.

어쨌든 장치에 처음에 불량 블록이 있고 라이브 이미지를 구울 수 없는 경우 두 개의 파티션을 만들어야 합니다.

여기에 이미지 설명을 입력하세요.

그런 다음 이미지를 다운로드하고 첫 번째 파티션의 오프셋을 확인합니다.

# parted  /home/morfik/Desktop/debian-live-8.1.0-amd64-mate-desktop.iso
(parted) unit s

(parted) print
Model:  (file)
Disk /home/morfik/Desktop/debian-live-8.1.0-amd64-mate-desktop.iso: 2015232s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End       Size      Type     File system  Flags
 1      64s    2015231s  2015168s  primary               boot, hidden

즉 64섹터, 즉 64*512=32768바이트를 의미합니다. 이제 이미지를 마운트할 수 있습니다:

# mount -o loop,offset=32768 /home/morfik/Desktop/debian-live-8.1.0-amd64-mate-desktop.iso /mnt
 mount: /dev/loop0 is write-protected, mounting read-only

# ls -al /mnt
total 593K
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:09:57 ./
drwxr-xr-x 24 root root 4.0K 2015-06-08 20:54:43 ../
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:08:34 .disk/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 15:59:10 dists/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:09:41 install/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:08:29 isolinux/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:08:29 live/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 15:59:00 pool/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:09:37 tools/
-r--r--r--  1 root root  133 2015-06-06 16:09:44 autorun.inf
lr-xr-xr-x  1 root root    1 2015-06-06 15:59:10 debian -> ./
-r--r--r--  1 root root 177K 2015-06-06 16:09:44 g2ldr
-r--r--r--  1 root root 8.0K 2015-06-06 16:09:44 g2ldr.mbr
-r--r--r--  1 root root  28K 2015-06-06 16:09:57 md5sum.txt
-r--r--r--  1 root root 360K 2015-06-06 16:09:44 setup.exe
-r--r--r--  1 root root  228 2015-06-06 16:09:44 win32-loader.ini

이러한 파일에 액세스할 수 있으므로 prendrive의 두 번째 파티션에 복사할 수 있습니다.

# cp -a /mnt/* /media/morfik/good

다음 명령은 부팅을 위해 두 번째 파티션을 MBR로 하드코딩합니다.

printf '\x2' | cat /usr/lib/SYSLINUX/altmbr.bin - | dd bs=440 count=1 iflag=fullblock conv=notrunc of=/dev/sdb

두 번째 파티션에서는 ext4 파일 시스템을 사용하고 있어서 extlinux를 사용해야 하는데 이미지에는 isolinux가 있습니다. 이 폴더를 삭제할 필요는 없으며 이름을 변경할 수 있습니다.

# mv isolinux extlinux

이 폴더 내의 구성 파일에 대해 동일한 작업을 수행해야 합니다.

# mv isolinux.cfg extlinux.conf

이 단계가 필요한지는 잘 모르겠지만 항상 모든 파일을 복사합니다.

# cp /usr/lib/syslinux/modules/bios/* /media/morfik/good/extlinux/

마지막으로 두 번째 파티션에 extlinux용 VBR을 설치하는 것입니다.

# extlinux -i /media/morfik/good/extlinux/
/media/morfik/good/extlinux/ is device /dev/sdb2 

거의 그 정도입니다. 이미지를 테스트했는데 부팅되고 라이브 시스템이 제대로 실행됩니다. 이 솔루션은 모든 유형의 라이브 이미지에 작동합니다.

관련 정보