부팅 가능한 USB 스틱을 다른 크기의 스틱에 복제


11

하드웨어 : 2 개의 8GB USB 플래시 드라이브
DISTRO : Mint 9 Xfce 영구 라이브 CD

하나의 USB 플래시 드라이브에는 두 개의 파티션이 있습니다 :
1) FAT32 700MB Mint 9 파티션
2) ext3 7.3GB casper-rw파티션

목표 :
처음부터 다시 설치하고 구성하는 과정을 거치고 싶지 않기 때문에 USB 플래시 드라이브를 복제하고 싶습니다.

경험 :
1) dd플래시 드라이브 중 하나의 크기가 1MB가 다르고 때로는 사본이 손상되기 때문에이 작업에서 작동하지 않는 것으로 나타났습니다 .

2) 나는 gparted첫 번째 드라이브와 같은 두 번째 드라이브 를 사용 하고 사전 포맷 한 다음 rsync어떤 이유로 일부 파일이 복사되지 않고 드라이브를 부팅 할 수 없기 때문에 각 파티션을 개별적으로 작동하지 않는다는 것을 알았습니다.

작업 스틱을 유지하고 사본을 만들어 친구를 위해 스틱을 구성하고 싶습니다. 이 방법으로 다른 스틱을 올리면 항상베이스 스틱을 기다리게됩니다.


어떤 부트 로더를 사용하십니까 (syslinux?). 게시물에서 해당 rant를 제거하는 것이 좋습니다. 질문에 아무런 가치가 없습니다.
Mat

나는 민트 라이브 USB 설치 프로그램을 사용했기 때문에 모두 자동이었습니다. 복제 프로세스가 부트 로더 작업을 피하고 현재 부트 로더 conf를 복사하기를 바라고 있습니다.
Joshua Robison

답변:


5

소개

PC 파티션이있는 드라이브 (대부분의 USB 스틱에서 찾을 수있는 드라이브)의 경우 부트 로더는 드라이브의 시작 부분 (드라이브의 부트 섹터에서 1 단계 부트 로더)과 작은 부분으로 구성됩니다. 다른 부분 (파일의 2 단계 부트 로더). 1 단계 데이터에는 2 단계의 실제 위치가 포함됩니다. 전체 장치를 복사 한 경우 (시도한 항목 dd) 1 단계 부분은 동일한 실제 위치에 있고 스틱은 작동하지만 새 스틱은 최소한 다음과 같아야합니다. 원본보다 큽니다. 파티션을 다시 만들고 파일을 복사하면 파일이 아니기 때문에 1 단계가 누락 된 것입니다.

2 단계가 첫 번째 (FAT32) 파티션에 있다고 생각합니다 (그러나 확인하지는 않았습니다). 그렇다면 해당 파티션 도매를 복사하고 부트 섹터도 복사 한 다음 두 번째 파티션이 남은 공간을 정확히 차지하도록 파티션 테이블을 편집하고 두 번째 파티션의 파일을 복사하십시오. 부팅 섹터와 첫 번째 파티션의 원시 이미지를 하드 디스크의 파일에 보관할 수도 있지만 USB 스틱에서도 복제 할 수 있습니다.

다른 크기의 복제본 만들기

아래에서는 원래 스틱이 /dev/sdb포함 된 장치와 클론이 포함 된 장치를 호출합니다 /dev/sdc. 필요에 따라 대체 이름. 필요한 경우 마운트 지점을 작성하십시오. FAT32 파티션 (디스크 시작 부분)의 번호는 1이고 ext3 파티션의 번호는 2라고 가정합니다. 필요한 경우 다른 숫자로 대체하십시오.

스틱에서 복제하는 경우 첫 번째 부분 :

head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1

먼저 이미지 파일에서 복제하는 경우 :

cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1

통화가하기 partprobe때문에 필요가 커널 다시로드 디스크 (이 부트 섹터에, 그리고 부트 섹터 수정 위의 두 시나리오의 첫 번째 명령)에서 파티션 테이블. 생략하면 오류가 발생하거나 커널이 자동으로 스틱에 쓰레기를 씁니다.

이미지 파일을 만들려면

head -c 512 </dev/sdb >boot_sector.img 
cat /dev/sdb1 >first_partition.img

부팅 섹터와 첫 번째 파티션을 얻은 후에는 파티션 테이블을 다시 편집하여 두 번째 파티션의 크기를 조정해야합니다. 올바른 입력을에 공급하여 자동으로 수행 할 수 있습니다 fdisk. 경고, 이것은 매우 오류가 발생하기 쉽기 때문에 테스트하지 않았습니다. 이 부분에 익숙하지 않다면 손으로 해보십시오.

sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2         # delete partition 2
n p 2       # new primary partition 2...
_ _         # ... using all available space
w q         # write and quit
EOF

마지막으로 파티션 테이블을 다시로드하고 ext3 파일 시스템을 생성 한 다음 파일을 복사하십시오.

partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2

더 큰 클론을 만드는 단순화 된 방법

원하는 경우 전체 스틱의 이미지를 저장할 수 있습니다. 최소한 큰 스틱에서 해당 이미지를 직접 사용할 수 있습니다.를 사용하여 이미지를 새 스틱에 복사 cat <whole.img >/dev/sdc한 다음 실행하여 partprobe /dev/sdc(또는 스틱을 뽑았다가 다시 넣어) 파티션 테이블을 다시 읽으십시오.

그런 다음 원하는 경우 복제본을 확대 할 수 있습니다. 이 순서대로 :

  1. 파티션을 확대하십시오. 불행히도, 나는 이것을 간단한 방법으로하는 법을 모른다. 명령 (not , 파일 시스템의 크기를 조정)으로 parted이를 수행 할 수 있지만 반올림 오류를 피 하려면 올바른 인수를 찾아야합니다 (섹터로 전환 ( )).moveresizeunit s
  2. 파일 시스템을 확대하십시오. 그 부분은 쉽습니다. resize2fs /dev/sdc2파일 시스템이 전체 파티션 크기를 사용하도록 실행 하십시오.

필요 이상으로 큰 스틱에서 시작하는 경우 위의 단계를 역순으로 수행하여 축소 할 수 있습니다 (먼저로 파일 시스템 resize2fs을 축소 한 다음로 파티션을 축소 parted).

또는 먼저 스틱을 이미지 파일로 복사 한 다음 해당 이미지 파일로 작업 할 수 있습니다. 파티션에 액세스하려면 루프 장치를 사용하십시오 . 특히 파일의 일부를 디스크에 연결하십시오 . 다음은 이미지를 축소하려는 경우 단계에 대한 스케치입니다 (경고, 테스트되지 않음, 신중하게 진행하고 수학을 다시 확인).

fdisk -lu whole.img  # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $  # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k

흠. head를 사용하여 첫 번째 300MB 정도의 두 번째 파티션을 img 파일로 복사 할 수 없습니까? 파일 끝에 빈 공간 / 빈 블록을 모두 잘라 내지 않습니까?
Joshua Robison

1
@Joshua : 아니요. 모든 파일 데이터가 처음 300MB에있을 이유가 없기 때문에 파일 시스템의 일부라도 그렇게 할 수는 없습니다. 올바른 크기의 유효한 파일 시스템을 만들어야합니다. 또한 올바른 크기의 파티션이 있어야합니다. 파티션의 크기는 부팅 섹터에 저장됩니다. 최소 크기의 이미지에서 시작하여 원하는 경우 이미지를 확대하려는 경우 내 대답에 해당 방법을 추가했습니다.
Gilles 'SO- 악의

흠. 전에 파일을 복사하려고 시도했지만 어떤 이유로 든 모든 것이 복사되지 않았습니다. 나는 sudo로 rsync도 시도했다. 그리고 나는 su root를 시도하고 그것을 너무 생각했다. 어쨌든 드라이브가 마운트되지 않았다고 확신합니다. 드라이브를 gparted로 축소 한 다음 img 파일을 만들어 더 작은 디스크로 복원하기로 결정했습니다. gparted의 사전 축소는 내가 찾을 수있는 유일한 간단한 솔루션이었습니다. 그래도 도움을 주셔서 감사합니다.
Joshua Robison

당신의 대답은 아마도 정확하고 아마도 내가 요구하는 것을 할 것입니다. 나에게는 너무 복잡하다. 그래서 gparted pre shrink 방법을 사용했습니다.
Joshua Robison

이 줄에 오타가 head -c 512 </dev/sdb >/bev/sdc있습니까?
안토니오

3

~ $ : sudo apt-get 설치 gddrescue ddrescue

~ $ : ddrescue / dev / sda / dev / sdb -v

;

구문 : utility / source / drive / destination / drive --verbose

설명 : 진행률 및 오류 검사를 표시하므로 허용 가능한지 또는 어딘가에 있는지 알 수 있습니다. 원하는 크기 블록 에 b =를 추가 할 수도 있습니다 . "gddrescue"는 "ddrescue"의 GUI 기반 버전이지만 문제없이 작동하므로 위에서 설명한 ddrescue 만 사용합니다.


2
올바른 형식입니다 ddrescue -v /dev/sda /dev/sdb(옵션은 장치 / 파일 이름보다 먼저옵니다). 이 도구를 지적 해 주셔서 감사합니다! 사용하는 것보다 훨씬 쉽습니다 dd!
xmnboy

0

최근에 16GB에서 64GB 3.0 USB로 Kali 라이브 암호화 지속성을 복제했습니다. 내 호스트 OS는 Windows 10 pro입니다. 나는 리눅스 배포판을 사용하여 복제하려고 시도하지 않았다. 나는 위의 답변이 당신이 필요로하는 것이라고 확신하지만 모든 Windows 사용자에게; AOMEI 디스크 파티션 도우미를 사용했습니다. 사용이 매우 간단하여 SSD를 Ubuntu에 맞게 파티션하는 데 사용되었지만 난처합니다.

복제하려는 USB가 이미 라이브 부팅 용으로 포맷되어 있는지 확인해야했습니다. USB를 모두 연결하고 8GB 드라이브를 마우스 오른쪽 버튼으로 클릭하십시오. 를 클릭 한 copy다음 64GB 드라이브를 선택하면 "이 드라이브가 올바른 드라이브인지 확인하고 모든 것이 지워질 것"과 같은 많은 재즈를 묻습니다. 그냥 읽어보고 모든 것이 올바른지 확인하십시오. 실제로 많은 일을 할 필요가 없습니다.

프로세스가 완료 될 때까지 기다리면 모든 준비가 완료됩니다. USB를 테스트 한 결과 모든 것이 작동했습니다!

나는 이것이 USB에서 USB로 라이브 배포판을 복제하는 것이 가장 쉬운 방법이라는 것을 알았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.