將可啟動 U 盤複製到不同大小的 U 盤
硬體:2 個 8GB USB 快閃記憶體驅動器
發行:Mint 9 Xfce 持久 Live Cd
一個 U 盤有兩個分區:
FAT32 700MB Mint 9 分區
ext3 7.3GB
casper-rw
分區目標:
我想複製那個 USB 快閃記憶體驅動器,因為我不想再經歷從頭開始安裝和配置的時間。
經驗:
我發現這
dd
不適用於這項工作,因為如果我的一個快閃記憶體驅動器的大小甚至有 1MB 不同,有時它們是這樣,那麼副本就會損壞。我發現
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
需要呼叫 to
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
(或拔下記憶棒並重新插入)以重新讀取分區表。然後,如果您願意,可以放大複製。按此順序:
- 擴大分區。不幸的是,我不知道如何以簡單的方式做到這一點。
parted
可以使用move
命令來完成(不是resize
調整文件系統大小的),但您需要找出正確的參數——切換到扇區 (unit s
) 以避免舍入錯誤。- 擴大文件系統。這部分很簡單:只需執行
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