題:
如何使用SD卡中的圖像製作圖像(.img)(但與原始圖像一樣緊湊)?
mf_
2013-07-06 21:42:30 UTC
view on stackexchange narkive permalink

我嘗試過:

  sudo dd bs = 4k if = / dev / mmcblk0 of = / media / 1BAB47551C66A42B / raspbian_migs2.gz  

它創建了一個7.6 GB的.img文件(卡大小,但卡上有700 MB)。

並且:

  sudo dd bs = 4k if = / dev / mmcblk0 | gzip > /media/1BAB47551C66A42B/raspbian_migs2.gz 

創建一個2.7 GB的.gz文件。

原始Raspbian( Debian 7 (Wheezy))來自 http://www.raspberrypi.org/downloads的494.44 MiB。

如何使用SD卡中的圖像製作尺寸相似的圖像?

(我在Ubuntu上。)

http://raspberrypi.stackexchange.com/questions/311/how-do-i-backup-my-raspberry-pi**這沒有幫助**
五 答案:
goldilocks
2013-07-07 18:22:34 UTC
view on stackexchange narkive permalink

您在對RooTer的評論中提到:A)您已經使用 gparted 減小了初始分區的大小,但是 dd 仍然複製了整個卡,並且B)想要在圖像中包括兩個分區。

問題“ A”很容易解釋:您仍在復制整個卡,因為這就是 / dev / mmcblk0 的含義。各個分區當然是 / dev / mmcblk0p1 / dev / mmcblk0p2 。這是問題“ B”中的複雜問題,但是由於 / dev / mmcblk0 code開頭的分區表,您不能簡單地 dd 每個分區並將兩個文件連接在一起>索引每個分區的開始和長度。否則,該映像將無法使用。

但是,您可以從 fdisk -l 獲取每個分區的長度,並使用該長度來確定 dd的某些參數。 。例如:

  > fdisk -l / dev / mmcblk0Disk / dev / mmcblk0:16.1 GB,16138633216字節4磁頭,16個扇區/磁道,492512個柱面,總共31520768個扇區單位= 1 * 512扇區= 512字節扇區大小(邏輯/物理):512字節/ 512字節I / O大小(最小/最佳):512字節/ 512字節磁盤標識符:0x00017b69設備啟動起始塊ID系統/ dev / mmcblk0p1 8192 122879 57344 c W95 FAT32(LBA )/ dev / mmcblk0p2 122880 26746879 13312000 83 Linux  

“開始”和“結束”單位是扇區,請注意已給出了512字節的扇區大小。對於 / dev / mmcblk0p2 ,26746879(最後一個扇區)-122880(第一個扇區)= 26623999/2(每KB 2個扇區)/ 1024(KB每MB)/ 1024(MB每GB) )= 12.69,這使我使用gparted將分區增長到12 GB,所以這看起來是正確的(確實,我應該​​使用1000而不是1024作為存儲的除數,這可以達到13.31 GB,但是我懷疑gparted和其他一些工具也使用1024)。

因此,您要檢查的第一件事是第二個分區實際上是您將其設置為較小的大小。接下來,只需將這些數字與 dd 一起使用即可;對我來說應該是:

  dd if = / dev / mmcblk0 of = rpi.img bs = 512 count = 26746880  

我有一個避免出現對 dd 的誤解。有一種簡單的方法可以檢查它是否有效:

  > fdisk -l rpi.imgDisk rpi.img:102 MB,102400000字節255個磁頭,63個扇區/磁道,12個柱面,總計200000個扇區1 * 512 = 512字節的扇區扇區大小(邏輯/物理):512字節/ 512字節I / O大小(最小/最佳):512字節/ 512字節磁盤標識符:0x00017b69設備啟動起始塊ID系統rpi.img1 8192 122879 57344 c W95 FAT32(LBA)rpi.img2 122880 26746879 13312000 83 Linux  

請注意,此處存在一些差異:“開始”和“結束”扇區與原始分區表匹配,但是統計數據的總大小僅為102 MB!這是因為我實際上使用了 count = 200000 作為 dd 的參數,因為我真的不想打擾12 GB的副本(注意“總計200000個扇區”) 。底部表格沒有反映出這一點的原因是因為fdisk從SD卡開頭的映像開頭逐字複製的分區數據中獲取其信息,正如我在第二段中提到的,至關重要保持。如果我(正確地)複製了其餘的內容,那麼這些數字將是正確的,並且圖像將是可行的。

嘗試一下。 :)

在OSX上,fdisk不能清楚地以字節為單位打印出扇區大小。相反,它提供了表示圓柱體/磁頭/扇區的“幾何:966/255/63 [15523840個扇區]”。在這種情況下應使用bs和count的什麼值?
@ArthurHebert:總字節數/總扇區數。例如。在上面的第一種情況下為16138633216/31520768 = 512,在第二種情況下為102400000/200000 = 512。
您可以使用`fdisk -l <​​device>`,它應該在不進入交互模式的情況下打印表。
RooTer
2013-07-07 01:50:02 UTC
view on stackexchange narkive permalink

我想問題在於曾經使用過的扇區中仍然有灰塵。刪除文件後,只會從文件系統中刪除元數據,而不會刪除數據本身,因此會留下一些隨機的零,而不是僅壓縮零位塊。

簡便的解決方案,但需要重寫所有可用空間卡上。請記住,SD卡的生命週期受到重寫次數的限制,因此這不是首選方法。

  dd bs = 4M if = / dev / zero of = / root / junksyncrm垃圾郵件 

涉及更多的解決方案,因為您需要在當時不使用該SD卡的另一台計算機上安裝 zerofree

  zerofree / dev / mmcblk0p2  

有關更多信息,請閱讀 http://intgat.tigress.co.uk/rmy/uml/index.html

您要記住的是,即使分區較小,對/ dev / mmcblk0進行 dd 也會復制整個設備。如果您在執行上述方法之一之前使用 raspi-config 擴展主分區,就可以了。

PS。如果您不介意更改格式的圖像文件,則可以使用 partimage ,對於已知的文件系統,該文件會忽略已釋放的塊,即使它們中仍然有些髒污。同樣,未掛載文件系統時最好使用partimage以避免備份損壞。您可能可以以只讀方式重新安裝它,但是我將由您自行決定。

作為我嘗試完成此任務的一部分,我使用gparted減少了sdcard分區以僅容納我擁有的數據,然後嘗試dddding,結果是相同的7.6GB文件,partimage無法保存2個分區(/ boot + /)合併為1個映像
也許我做得不夠清楚-壓縮它時應該有所作為,就像您之前使用gzip嘗試過的那樣。
以這種方式填充卡會導致整個寫入周期,並會縮短卡的使用壽命。嘗試`dd bs = 4M if = / dev / zero of = / root / junk`
@tapped-out thx,編輯;)
lenik
2013-07-07 08:54:38 UTC
view on stackexchange narkive permalink

簡短答案-使用2GB SD卡。

長答案, dd 不知道“好”數據的結尾,您必須以某種方式告訴它。 p p>

有兩種方法,最簡單的方法是使用2GB SD卡,它會自動停止複制超過2GB的數據,並會按您的意願生成500MB的壓縮文件。

涉及的一項是從分區表計算正確的數據大小,並將此正確的大小指定為 dd 命令的參數。為此,您可以使用 bs = XXX (塊大小)和 count = XXX (塊計數)參數。例如,您可以為10MB的塊大小指定 bs = 10M (與您在命令中使用的4k塊大小相比,這肯定會使復制更快)和 count = 200 複製10MB * 200 = 2000MB(2GB)。您可能需要根據您的SD卡分區方案來調整塊大小和塊數。

給dd指定一個特定的大小將永遠無法工作。假定文件系統中的所有實際數據都整齊地排列在設備的開頭,因此,如果在8 GB分區上有2GB,則只需複制第一個2GB。這是假的。那2 GB的數據將散佈在整個空間上,尤其是在現代SD卡上,直到所有可用塊都至少使用了一次,才重新使用塊兩次(這稱為*損耗平衡*,這會延長卡的使用壽命) )。
@goldilocks如果我確實調整sdcard的大小以將所有分區縮小到最大可能的大小(僅數據)該怎麼辦?
請@goldilocks,更仔細地閱讀問題和答案,我是在談論8GB SD卡上的2GB分區,而不是關於8GB分區上的2GB數據,因為您的想像力以某種方式告訴了您。
lenik:是的,我有點驚訝,我以這種方式向您解釋,所有的道歉-除非您編輯該帖子,否則我不能撤消我的投票:/儘管我仍然不認為這個答案特別有用(沒有冒犯- -因為這不是簡單地添加* partition *,有關如何執行此操作的說明同樣沒有用),但是我會做。 @mf_是的,這是可行的(您讀了我的答案嗎?它將起作用...)
@goldilocks我已經編輯了答案。不知道為什麼它沒有用,特別是當您給出完全相同的答案時,只是帶有更多詳細信息。
Piotr Kula
2014-05-19 20:06:32 UTC
view on stackexchange narkive permalink

dd-複製並轉換 不是執行所需工作的正確工具。這是一個低級別的逐扇區復制(和轉換)工具,非常適合複製引導扇區,格式化設備以及各種低級任務。使用 dd 時,即使是文件系統結構中未包含的圖像,也要逐扇區復製到圖像。

提供的圖像 Raspberry Pi基金會的“ strong>”是經過特別編譯的映像,其中包含安裝腳本,解壓縮二進製文件和初始設置,之後無論如何您都必須從Internet獲得更新-這是有意的,但要使它像這樣工作是一項艱鉅的任務。 / p>

一種避免複製空扇區的流行解決方案是使用 File Level 複製系統-CloneZilla是獨立的,可從CD引導,類似於 ye olde Norton Ghost ,但clonezilla支持Linux(及更多)文件系統。因此,它將僅複製正在使用的文件,並僅從這些文件創建容器。大大減小尺寸!

berto
2015-11-04 20:41:19 UTC
view on stackexchange narkive permalink

我也有同樣的問題,想要一個易於使用的工具。搜索並找不到後,我寫了 mkimg.sh。我概述了我在以下位置使用的過程: https://raspberrypi.stackexchange.com/a/37899/32585



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...