.png)
ノートパソコンのカード リーダーが動作しません。dd (または他のツール) を使用して、ネットワーク ディスクにイメージを書き込むことはできますか。
私は、ラズベリーパイのディストリビューションを別のものに置き換えようとしています。SD カードには 6 GB の空き容量があり、2 GB しか使用していません。
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
、リモートの標準入力はdd
SSH サーバーから取得されるため、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 を起動し、ネットに接続すると、ストレージは十分に制御されます。私はプロではないので、ここではただの思いつきです。専門家の皆さん、私が間違っている場合は訂正してください。