Live-Usb

將可啟動 U 盤複製到不同大小的 U 盤

  • January 12, 2019

硬體:2 個 8GB USB 快閃記憶體驅動器

發行:Mint 9 Xfce 持久 Live Cd

一個 U 盤有兩個分區:

  1. FAT32 700MB Mint 9 分區

  2. ext3 7.3GBcasper-rw分區

目標:

我想複製那個 USB 快閃記憶體驅動器,因為我不想再經歷從頭開始安裝和配置的時間。

經驗:

  1. 我發現這dd不適用於這項工作,因為如果我的一個快閃記憶體驅動器的大小甚至有 1MB 不同,有時它們是這樣,那麼副本就會損壞。

  2. 我發現gparted像第一個驅動器一樣使用和預格式化第二個驅動器,然後rsync單獨對每個分區進行 ‘ing 是行不通的,因為由於某種原因,某些文件沒有被複製並且驅動器仍然無法啟動。

我想保留我的工作棒,只是複制它並為我的朋友配置棒。這樣,如果我弄錯另一根棍子,我將永遠讓我的基礎棍子坐等。

介紹

對於帶有 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

需要呼叫 topartprobe以便核心從磁碟重新載入分區表(它位於引導扇區中,並且上述任一場景中的第一個命令都會修改引導扇區)。如果你忽略它,要麼你會得到錯誤,要麼核心會默默地把垃圾寫到記憶棒上。

要製作圖像文件:

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

引用自:https://unix.stackexchange.com/questions/14435