我該怎麼做: dd if=coolstuff.iso of=(ssh kev@mypi )

我該怎麼做: dd if=coolstuff.iso of=(ssh kev@mypi )

我的筆記型電腦上的讀卡機無法運作。我可以使用 dd (或其他一些工具)將映像寫入網路磁碟嗎?

我正在嘗試將一個樹莓派發行版替換為另一個發行版。 SD 卡有 6GB 可用空間,僅使用 2GB。

從 SD 卡

$ sudo parted -l
Model: SD SU08G (sd/mmc)
Disk /dev/mmcblk0: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  95.4MB  94.4MB  primary   fat16        lba
 2      95.4MB  1878MB  1783MB  extended
 5      96.5MB  1878MB  1782MB  logical   ext4
 3      1878MB  7948MB  6070MB  primary   ext4

,在你批評我為什麼要這麼做之前,先回答這個問題……然後告訴我我有多蠢。

答案1

您可以透過 SSH 進行管道傳輸:

dd if=something | ssh host dd of=something

但您應該有一個比簡單的文件複製操作更好的理由來使用dd,您最好使用scprsync等。

答案2

假設您的 Raspberry 上有一個 SSH 伺服器,並且 Raspberry 上的 SD 卡顯示在 上/dev/sda,您將執行以下操作:

dd if=SDcardimage.img | ssh -o MACs=hmac-ripemd160 -l raspberry-pi-user <your Raspberry's IP address> 'dd of=/dev/sda'

我解釋:

  1. dd當未指定輸出檔案時輸出到標準輸出of,當未指定輸入檔案時從標準輸入讀取if
  2. 當您直接向 SSH 傳遞命令時,用戶端會將其標準輸入轉發到伺服器,然後伺服器將該資料傳遞到發送到伺服器的命令上指定的進程的標準輸入。
  3. 因為本例中 SSH 用戶端的標準輸入來自dd,而遠端的標準輸入dd來自 SSH 伺服器,這將導致 SSH 用戶端-伺服器對將充當加密的資料傳輸,橋接來自您的標準輸出dddd。 (這其實就是 SSH 進行遠端登入的方式,標準輸入來自鍵盤,接收標準輸入的遠端進程是 UNIX shell)。
  4. 我傳遞給 SSH 的選項MACs強制連接使用 RIPEMD160 演算法作為訊息完整性摘要。這樣做可以保護傳輸的數據,以便檢測任何傳輸錯誤或故意篡改。考慮到您正在使用無線電波傳輸磁碟映像,這一點很重要。您可能想要新增o Ciphers=aes256-cbco Ciphers=aes256-ctr強制加密,以防 Raspberry 預設執行較弱的加密。
  5. -l指示您用來登入的用戶,只是因為我傾向於使用該語法。

答案3

更新正在運行的系統以便在下次重新啟動時使用新的根映像比直接透過網路複製要複雜一些。假設根映像已開啟/dev/mmcblk0p5(如上面的輸出parted -l和註釋所示),OP 應該能夠將根分割區從映像複製到而/dev/mmcblk0p3不會出現任何問題(當然,前提是您沒有任何資料)想要保留在這個分割區上) 。您可以按照以下說明進行操作。但是,請確保執行建議的檢查並適當更改命令,盲目複製下面的命令是清理系統的好方法。

  1. 我假設新映像上的根分割區是分割區 5,但也可能不是。您可以列印pi.img使用呼叫的映像的分區表parted pi.image print。如果您不確定,請將輸出新增到您的問題中。

  2. 由於我們只想複製根分割區的映像,而不是整個磁碟映像(其中還將包含自己的分割區表和啟動分割區),因此您需要將其與映像的其餘部分分開。執行此操作的一種方法(在 Linux 系統上)是使用kpartx

    sudo kpartx -av pi.img
    

    如果沒有使用其他循環設備,則將使用loop0,但是請檢查輸出並相應地更改進一步的命令。

  3. 透過執行以下操作,確保目標分割區未安裝在 Raspberry Pi 上:

    sudo umount /dev/mmcblk0p3
    
  4. 對於下一步,您需要能夠透過 ssh 傳輸數據具有 root 存取權限。有幾種方法可以做到這一點,但我認為最簡單的就是啟用 root 登入。通常不建議這樣做,但由於您想上傳新的系統映像,我認為這不會成為問題。在 Raspberry Pi 上執行以下操作:

    sudo passwd root
    
  5. 接下來將映像複製到 Raspberry Pi(使用RAAK 關於資料完整性的建議):

    sudo dd if=/dev/mapper/loop0p5 |
      ssh -o MACs=hmac-ripemd160 root@host dd of=/dev/mmcblk0p3
    

    host可以是/etc/hostnameRaspberry Pi 上的任何內容(似乎mypi是 OP)或 Raspberry Pi 的 IP 位址。如果您不使用loop0.請記住相應地更改此設定。

  6. 接下來更改 Raspberry Pi 的根分割區,據我所知(我沒有 Raspberry Pi 進行測試),您必須更改/boot/cmdline.txt.您將變更表示root=/dev/mmcblk0p5為 的部分root=/dev/mmcblk0p3

  7. 您可以透過執行以下操作來刪除從中複製的系統上的loop和設備:mapper

    sudo kpartx -d pi.img
    
  8. 現在重新啟動 Raspberry Pi,您應該可以使用新映像了!

答案4

如果您使用 USB ARM 映像啟動 Pi,連接到網絡,這樣儲存就足夠了。我不是專業人士,只是在這裡吐槽一下。如有錯誤,請專家指正。

相關內容