我有一張 16 GB SD 卡(特別是用於 PinePhone 的可啟動 Mobian SD 卡),有兩個分區,總共 6 GB。剩餘空間未分配。如何取得 SD 卡的 6 GB 映像?
答案1
使用稍微脆弱的命令,可以根據請求將磁碟機的第一部分複製到映像檔。然而,有幾點需要注意:
- 由於需要從命令列直接存取設備文件,因此必須執行整個命令
root
(如sudo su
使用解決方案之前的命令。) - 備份分區表,如果是GPT分區表,將要不是被複製。
- 「技巧」取決於分區表是否完整 - 提到的未分配空間真的是未指派的分割區,不是您不想複製的某個分割區。
- 一個或多個隔板被收集在前面。如果它們有間隙,則該間隙將被複製。
- 這取決於您的系統同時安裝了
fdisk
命令(可能)和bc
命令(可能)。兩者都是標準的,如果需要,可以從預設儲存庫安裝。 - 該圖像檔案將歸 root 所有,因此
chown
如果您需要使用者擁有完全存取權限,則必須使用它。
這是完整的命令,斷行以便於閱讀
dd if=/dev/sdx of=Mobian.img\
bs="$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)"\
count="$(echo "$(fdisk -o end -l /dev/sdx | tail -1) + 1"|bc)"\
status=progress
細分:
首先,/dev/sdx
需要變更以反映正確的裝置名稱,除非您碰巧有 23 個其他先前連接的磁碟。
第一行是預期的dd
命令,設備名稱和檔案名稱根據您目前的需求設定。
第二行將區塊大小設定為dd
SD 卡的磁區大小。幾乎可以肯定是 512 位元組。如果您 100% 確定它是 512,則可以將該行替換為bs=512
。如果您想安全並保持該命令將來在任何裝置上可用,請將多餘的內容保留在那裡。操作是:
fdisk -l /dev/sdx
報告有關設備的數據grep sector
“sector”在輸出中出現兩次tail -1
只取得最後一行包含「扇區」的內容cut -d' ' -f6
在欄位之間使用空格只能得到第 6 個欄位(磁區大小以位元組為單位)
第三行告訴我們要複製dd
多少個「區塊」的大小。bs=
同樣,如果您恰好知道該數字是什麼,請使用它而不是命令。為了“面向未來”,我再次保留了完整的命令:
- `fdisk -o end -l /dev/sdx` list the partition information about the device, and only output the ending sector ID of each `-o end`
- `tail -1` it don't matter how many there are, we only need the last sector of the last partion.
- `echo "... + 1" | bc` add one to the last sector ID. Uses the `bc` command, which is in integers unless told otherwise. Sectors are numbered from zero, to to copy sector #10 we have to copy 10 + 1 sectors (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
第四行是娛樂價值。一張速度等級為 10 的好卡將需要近 4 分鐘才能讀取 6 Gig 的資料。此status=progress
選項dd
將導致終端在“進展”時更新。否則你只會有一個終端機等待命令完成,感覺就像永遠一樣。
最後:如果您確定要複製的內容是 bog 標準、分割區正確對齊且大小剛好為 6 GiB,則可以使用以下簡單指令:
dd if=/dev/sdx of=Mobian.img bs=1048576 count=6145 status=progress
當然,一旦他們製作了新圖像並且您切換到該圖像,那麼所有的賭注都將與簡短版本一起消失。原來的頂部將繼續工作。它也適用於您稍後可能需要複製的其他“圖像”。
獎金:
如果您出於某種原因不喜歡dd
,您可以使用相同的數位收集步驟並應用命令head
:
head -c $(\echo "\
"$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)" *\
("$(fdisk -o end -l /dev/sdx | tail -1)" + 1)" | bc)\
/dev/sdx > Mobian.img
作為單行:
head -c $(\echo " "$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)" * ("$(fdisk -o end -l /dev/sdx | tail -1)" + 1)" | bc) /dev/sdx > Mobian.img'
答案2
您可以使用linux dd 命令。您可以選擇單獨讀出兩個分割區並隨後將它們連接起來,或者進行一些計算以確定第二個分割區的最後一個磁區。然後,您可以使用 bs(區塊大小)和 count(區塊數)參數執行 dd 命令,以使副本在第二個分區的末尾結束。