ノートブックのカードリーダーが機能しません。 dd(または他のツール)を使用してイメージをネットワークディスクに書き込むことはできますか?
あるRaspberry Piディストリビューションを別のディストリビューションに置き換えようとしています。 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
使用する方が良いでしょう。scp
rsync
答え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'
私が説明する:
dd
出力ファイルが指定されていない場合は標準出力に出力され、of
入力ファイルが指定されていない場合は標準入力から読み込まれますif
。- コマンドをSSHに直接渡すと、クライアントは標準入力をサーバーに渡し、サーバーはそのデータをサーバーに送信されたコマンドで指定されたプロセスの標準入力に渡します。
- この例では、SSHクライアントの標準入力はから出力され、リモートデバイスの標準入力は
dd
SSHdd
サーバーから来るため、SSHクライアントとサーバーのペアは暗号化されたデータ転送として機能し、標準出力を接続します。dd
リモコンの標準入力のローカルですdd
。 (これは実際にSSHがリモートログインを実行する方法です。標準入力はキーボードから出て、リモートプロセスは標準入力を受け取るUNIXシェルです。 - SSH に渡すオプションは、
MACs
接続がメッセージ整合性ダイジェストに RIPEMD160 アルゴリズムを使用するように強制します。これにより、送信エラーや意図的な変調を検出するために送信されたデータが保護されます。ディスクイメージを転送するために電波を使用することを考慮すると、これは重要です。 Raspberryがデフォルトで弱い暗号化を実行している場合は、暗号化を追加または強制o Ciphers=aes256-cbc
することができます。o Ciphers=aes256-ctr
-l
私はその構文を使用する傾向があるので、ログインに使用したユーザーを表示します。
答え3
次回の再起動時に新しいルートイメージを使用するように実行されているシステムを更新することは、ネットワーク経由で直接コピーするよりも少し複雑です。ルートイメージが開いていると仮定すると/dev/mmcblk0p5
(上記の出力と説明に示すようにparted -l
)、OPは問題なくイメージのルートパーティションをコピーできるはずです/dev/mmcblk0p3
(もちろん、必要なデータがないと仮定してください)。このパーティションに保管してください。)以下の指示に従うことができます。ただし、推奨事項を確認し、コマンドを適切に変更してください。次のコマンドを盲目的にコピーすることは、システムをクリーンアップする良い方法です。
新しいイメージのルートパーティションがパーティション5であると仮定しますが、そうでない可能性があります。
pi.img
使用したイメージのパーティションテーブルを印刷できますparted pi.image print
。わからない場合は、質問に出力を追加してください。完全なディスクイメージ(独自のパーティションテーブルとブートパーティションも含む)ではなく、ルートパーティションのイメージのみをコピーしたいので、それをイメージの残りの部分から分離する必要があります。これを行う1つの方法(Linuxシステムでは)は、次の方法を使用することです
kpartx
。sudo kpartx -av pi.img
他のループデバイスを使用しない場合は使用されますが、
loop0
出力を確認し、それに応じて追加のコマンドを変更します。次の手順を実行して、ターゲットパーティションがRaspberry Piにマウントされていないことを確認してください。
sudo umount /dev/mmcblk0p3
次の手順では、SSHを介してデータを転送できる必要があります。そしてルートアクセス権があります。これを行うにはいくつかの方法がありますが、最も簡単な方法はルートログインを有効にすることです。これは一般的にはお勧めできませんが、新しいシステムイメージをアップロードしたいので問題ありません。 Raspberry Piで次のことを行います。
sudo passwd root
次に、画像をRaspberry Piにコピーします(使用するデータの整合性に関するRAAKの推奨事項):
sudo dd if=/dev/mapper/loop0p5 | ssh -o MACs=hmac-ripemd160 root@host dd of=/dev/mmcblk0p3
host
これは、/etc/hostname
Raspberry Pi(mypi
OPであるように見える)またはRaspberry PiのIPアドレスにある任意の項目です。を使用していない場合loop0
でも、それに応じてこの設定を変更する必要があります。次に、Raspberry Piのルートパーティションを変更します。私が知っている限り(テスト用のRaspberry Piはありません)
/boot/cmdline.txt
変更root=/dev/mmcblk0p5
をroot=/dev/mmcblk0p3
。次の手順を実行して、デバイスとコピーされたソースシステムのデバイスを削除できます
loop
。mapper
sudo kpartx -d pi.img
今Raspberry Piを再起動すると、新しい画像が利用可能になります!
答え4
USB ARMイメージを使用してPiを起動する場合は、ネットワークに接続するだけで十分なストレージ容量があります。私は専門家ではないので、ここにコメントを残します。エラーがある場合は、専門家に修正を依頼してください。