การโคลนแท่ง USB ที่สามารถบู๊ตได้ไปยังแท่งที่มีขนาดต่างกัน


11

ฮาร์ดแวร์: แฟลชไดรฟ์ USB 8GB 2 ตัว
DISTRO: Live Cd แบบถาวร 9 Xfce

แฟลชไดรฟ์ USB หนึ่งตัวมีสองพาร์ติชัน:
1) FAT32 700MB Mint 9 พาร์ติชัน
2) ext3 7.3GB casper-rwพาร์ติชัน

เป้าหมาย:
ฉันต้องการทำซ้ำของแฟลชไดรฟ์ USB นั้นเพราะฉันไม่ต้องการผ่านช่วงเวลาของการติดตั้งและกำหนดค่าใหม่ตั้งแต่ต้นอีกครั้ง

EXPERIENCE:
1) ฉันพบว่าddมันใช้งานไม่ได้กับงานนี้เพราะหากแฟลชไดรฟ์ตัวใดตัวหนึ่งมีขนาดต่างกันถึง 1MB ซึ่งบางครั้งก็เป็นเช่นนั้นสำเนาก็จะเสียหาย

2) ฉันพบว่าการใช้gpartedและฟอร์แมตไดรฟ์ที่สองอย่างแรกและจากนั้นrsyncแต่ละพาร์ติชันจะไม่ทำงานเพราะเหตุผลบางประการไฟล์บางไฟล์ไม่ถูกคัดลอกและไดรฟ์ยังคงไม่สามารถบูตได้

ฉันต้องการให้ไม้เท้าของฉันทำงานและทำสำเนามันและกำหนดค่าไม้สำหรับเพื่อนของฉัน ด้วยวิธีนี้ถ้าฉันทำไม้เท้าขึ้นฉันจะมีไม้เท้าของฉันแค่นั่งรอ


คุณใช้ bootloader อะไร (syslinux?) โปรดลองลบคำพูดดังกล่าวออกจากโพสต์ของคุณซึ่งจะเป็นการเพิ่มคุณค่าให้กับคำถามของคุณ
Mat

ฉันใช้โปรแกรมติดตั้ง usb mint live มันจึงเป็นอัตโนมัติทั้งหมด ฉันหวังว่ากระบวนการโคลนนิ่งจะหลีกเลี่ยงการทำงานกับ bootloaders และคัดลอก bootloader ปัจจุบันของฉัน conf
Joshua Robison

คำตอบ:


5

บทนำ

สำหรับไดรฟ์ที่มีพาร์ติชัน PC (ซึ่งเป็นสิ่งที่คุณจะพบได้ใน USB sticks) bootloader ประกอบด้วยส่วนเล็ก ๆ ที่จุดเริ่มต้นของไดรฟ์ (ระยะที่ 1 bootloader ในบูตเซกเตอร์ของไดรฟ์) และ ส่วนที่ใหญ่กว่าที่อื่น (bootloader ขั้นที่ 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. ขยายพาร์ติชัน น่าเสียดายที่ฉันไม่รู้วิธีการใช้วิธีง่ายๆ partedสามารถทำได้ด้วยmoveคำสั่ง (ไม่resizeซึ่งปรับขนาดระบบไฟล์) แต่คุณต้องคิดออกอาร์กิวเมนต์ที่ถูกต้อง - สลับไปยังภาค ( unit 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

อืมม ฉันไม่สามารถใช้เฮดเพื่อคัดลอกพาร์ทิชั่นที่สอง 300MB แรกหรือมากกว่านั้นไปยังไฟล์ img ได้หรือไม่? นั่นจะไม่ตัดพื้นที่ว่าง / บล็อกว่างเปล่าทั้งหมดที่ส่วนท้ายของไฟล์หรือไม่
Joshua Robison

1
@ โจชัว: ไม่เพราะไม่มีเหตุผลว่าทำไมข้อมูลไฟล์ทั้งหมดจะอยู่ใน 300MB แรกและแม้ว่าคุณจะไม่สามารถมีส่วนร่วมในระบบไฟล์แบบนั้นได้ คุณต้องสร้างระบบไฟล์ที่ถูกต้องในขนาดที่เหมาะสม คุณต้องมีพาร์ติชันที่มีขนาดที่ถูกต้อง ขนาดของพาร์ติชันจะถูกเก็บไว้ในบูตเซกเตอร์ หากคุณต้องการเริ่มต้นจากภาพขนาดต่ำสุดและขยายภาพถ้าต้องการฉันได้เพิ่มวิธีการดังกล่าวในคำตอบของฉัน
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

อืมม ฉันพยายามคัดลอกไฟล์มาก่อน แต่ด้วยเหตุผลบางอย่างทุกอย่างไม่ได้คัดลอก ฉันลอง rsync ด้วย sudo และฉันคิดว่าฉันลองรูทและก็ทำเช่นกัน .... มันไม่ได้ผลสำหรับฉัน ฉันแน่ใจว่าไดรฟ์ไม่ได้ติดตั้ง ... อย่างไรก็ตาม ฉันตัดสินใจที่จะย่อขนาดไดรฟ์จากนั้นทำไฟล์ img จากนั้นกู้คืนไฟล์เหล่านั้นลงในดิสก์ที่มีขนาดเล็กลง การหดตัวล่วงหน้าใน gparted เป็นวิธีแก้ปัญหาง่ายๆที่ฉันสามารถหาได้ ขอบคุณสำหรับความช่วยเหลือของคุณ
Joshua Robison

คำตอบของคุณอาจถูกต้องและมักจะทำสิ่งที่ฉันขอ มันซับซ้อนเกินไปสำหรับฉัน ดังนั้นฉันจึงไปด้วยวิธีการหดตัวก่อน gparted
Joshua Robison

มีการพิมพ์ผิดในบรรทัดนี้head -c 512 </dev/sdb >/bev/sdcหรือไม่?
อันโตนิโอ

3

~ $: sudo apt-get install gddrescue ddrescue

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

;

ไวยากรณ์: ยูทิลิตี้ / แหล่งที่มา / ไดรฟ์ / ปลายทาง / ไดรฟ์ - verbose

ความคิดเห็น: แสดงความคืบหน้าและการตรวจสอบข้อผิดพลาดเพื่อให้คุณทราบว่าเป็นที่ยอมรับหรือวางสายในบางแห่ง คุณยังสามารถเพิ่มb =บล็อกขนาดใดก็ได้ที่คุณต้องการ "gddrescue" เป็นรุ่นที่มาจาก gui ของ "ddrescue" แต่ฉันใช้ ddrescue ตามที่เขียนไว้ข้างต้นเพราะมันทำงานได้โดยไม่มีปัญหา


2
โปรดทราบว่ารูปแบบที่เหมาะสมคือddrescue -v /dev/sda /dev/sdb(ตัวเลือกมาก่อนชื่อของอุปกรณ์ / ไฟล์) ขอบคุณสำหรับการชี้ให้เห็นเครื่องมือนี้! ง่ายกว่าการใช้dd!
xmnboy

0

เมื่อไม่นานมานี้ฉันได้โคลน Kali live ที่มีการเข้ารหัสอย่างถาวรจาก 16GB ไปเป็น 64GB 3.0 USB ระบบปฏิบัติการโฮสต์ของฉันคือ windows 10 pro ฉันไม่ได้พยายามโคลนโดยใช้ distro Linux ใด ๆ ฉันแน่ใจว่าคำตอบข้างต้นคือสิ่งที่คุณต้องการ แต่สำหรับผู้ใช้ windows ทุกคน ฉันใช้ผู้ช่วยพาร์ติชันดิสก์ AOMEI ใช้งานง่ายสุด ๆ ใช้สำหรับแบ่งพาร์ติชั่น SSD ของฉันให้พอดีกับ Ubuntu แต่ฉันเชือนแช

ฉันต้องทำให้แน่ใจว่า USB ที่ฉันโคลนนั้นได้รับการจัดรูปแบบแล้วสำหรับการบูตสด เสียบได้ทั้ง USB และเพียงคลิกขวาที่ไดรฟ์ 8GB คลิกcopyแล้วเลือกไดรฟ์ 64GB มันจะถามคุณหลายอย่างเช่น "คุณแน่ใจหรือว่านี่เป็นไดรฟ์ที่ถูกต้องทุกอย่างจะถูกลบ" แจ๊สทั้งหมดนั้น แค่อ่านมันและทำให้แน่ใจว่าทุกอย่างเป็นไปตามลำดับคุณไม่ต้องทำอะไรมาก

เพียงแค่รอให้กระบวนการเสร็จสิ้นและคุณก็พร้อมแล้ว ผ่านการทดสอบกล่าวว่า USB และทุกอย่างทำงาน!

ฉันพบสิ่งนี้เป็นวิธีที่ง่ายที่สุดอย่างน้อยสำหรับฉันการโคลนนิ่ง distros สดจาก USB เป็น USB

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.