再起動せずにスクリプトを使用してコマンドラインからハードディスクをリセットする(Mbrの削除とパーティションの削除)にはどうすればよいですか?


8

クリーンな状態から開始するには、コマンドラインからハードディスクを空の状態にリセットする必要があります。

これはワイプユーティリティの実行に関するものではなく、データを上書きする必要はありません。

この質問は、コマンドラインからすべてのパーティション削除するのとよく似ています。

そこでの解決策はかなりうまくいきます、

dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc

しかし、そのような上書きされたディスクを操作したい場合、デバイスがまだ使用中であるというエラーが表示されます。

root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy

または

root@grml ~ # partprobe
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.
Error: Partition(s) 2, 3 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.

だから私は手動でデバイスに「座っている」すべてのものを無効にする必要があります

umount /mnt/debootstrap
umount /mnt/debootstrap/tmp
umount /mnt/debootstrap/var/log
umount /mnt/debootstrap/var
umount /mnt/debootstrap/home
service mdadm stop
service lvm2 stop
vgremove vg_main
pvremove /dev/md1
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --remove /dev/md0
mdadm --remove /dev/md1

その後、partprobeコマンドは機能します。

より簡単に機能するコマンドはありますか?お気に入り

harddiskreset /dev/sda

そのため、異なるパーティション/ lvm / mdレイアウトのシステムで簡単に使用できますか?


1
再起動する以外に、それはあなたに何をするようにアドバイスしましたか?ここでのコンテキストは何ですか?
マイケルハンプトン

私はあなたの質問を理解しているかどうかわかりません。setup-storageを使用しているbashスクリプトでdebianシステムをブートストラップしたいのですが。スクリプトが常に機能するようにするには、ターゲットシステムのハードディスクを空にする/リセットする必要があります。それはあなたが求めたコンテキストですか?それから私は私の質問を拡張します。ハードディスクから
MBR

パーティションを設定する前に、MBRをワイプする必要があります。ここでは、設定した後にそうているようです!
マイケルハンプトン

ああ!わかった。(LiveCDから)機能させるために、最初にこれを実行する必要がありました。 sda of = / dev / sdbは、プライマリドライブの起動可能なコピーを作成するために機能しました。
SDsolar 2017

回答:


5

wipefsプログラムでは、簡単にパーティションテーブルの署名を削除することができます:

wipefs -a /dev/sda

ただし、LVMなどのデバイスを使用するプロセスはすべて停止する必要があります。

から man wipefs

wipefsは、指定されたデバイスからファイルシステム、raid、またはパーティションテーブルの署名(マジックストリング)を消去して、libblkidから署名を見えなくすることができます。

wipefsは、ファイルシステム自体やその他のデータをデバイスから消去しません。オプションなしで使用した場合、wipefsはすべての可視ファイルシステムとその基本的な署名のオフセットをリストします。

wipefsは、パーティションテーブルシグネチャを消去したときにBLKRRPART ioctlを呼び出して、変更についてカーネルに通知します。


2

私はいつもこれのために単にpartedを使用しました。特にfdiskとは異なり、現代の大容量HDDを処理できるため、ディスクラベルタイプの変更やパーティションの追加/削除に適しています。

あなたは走ることができます

$ sudo parted /dev/sda

これにより、物事が開始され、partedターミナルに移動します。その後、helpコマンドを実行して、使用可能なすべてのコマンドを表示できます。その非常に自明です。

はい、フォーマットしたいディスクのすべてのパーティションをアンマウントする必要があります。すべてのパーティションをアンマウントするより迅速な方法を単に探していた場合、umountコマンドで正規表現を使用してそれを実行できると思いますが、それはばかげているようです。

partedを使用してHDDを管理することで、ディスクや同様のものを強制的に更新する必要がなくなりました。

ドライブをまったく新しく使用できるように完全に更新するには、通常、次のようにします。

1)走って別れる sudo parted /dev/sda

2)実行して既存のパーティションを見つけます print

3)rm 11を削除するパーティション番号に置き換えて、既存のパーティションを削除します。次に、ディスク上の残りのすべてのパーティションについて繰り返します。

4)実行してdisklabelをリセットしmklabel gptます。gptラベルタイプを使用しますが、標準のmsdosまたは任意の設定を使用できます。ディスクラベルのタイプのリストは次のとおりです

5)mkpartを実行して新しいパーティションを作成するこれにより、パーティションの作成ウィザードが実行されます。始点と終点のデフォルトはセクターです。これを実行するunit前にコマンドを実行することにより、これを変更mkpartできます。この方法では、GBまたはTBまたはMBなどで指定できます。

6)を使用printして結果を確認し、新しいパーティションテーブル情報を表示します

7)次に、パーティションをフォーマットする必要があります。これにはいくつかのオプションがありますが、partedを介して行うべきではありません。代わりにquit、partedターミナルを終了するために実行してmkfsから、パーティションのフォーマットに使用することをお勧めします。ディスク全体ではなくパーティションをフォーマットするため、/ dev / sdaではなく/ dev / sda1で「mkfs」を実行することを忘れないでください。

それだけです。

これがあなたの質問に答えてくれることを願っています。

また、参照用のオンラインpartedマニュアルもここにあります。https//www.gnu.org/software/parted/manual/html_node/index.html

編集:

OPは、端末からではなくスクリプトからこの種のことを実行したいと考えていました。partedターミナル内ではなく、単一行コマンドでpartedを実行することにより、スクリプトを介して同じ種類の手順を実行できます。

たとえば、コマンド

$ sudo parted /dev/sda print

ドライブ情報とパーティションテーブルをbashコンソールに出力し、grepなどを使用して変数を作成したり、bashスクリプトで必要なものを作成したりできます。


端末から手動ではなくスクリプトから自動化する必要があります
c33s

元の投稿にスクリプトが記載されていないのを待ちます。これのどの部分をスクリプト化していますか?partedターミナルに入らなくても、partedコマンドを実行できると思います。それについてはよくわかりません。
KroniK907

確認のために、partedを1行のコマンドから実行できます。たとえばparted /dev/sda print、/ dev / sdaのパーティションテーブルを出力します。bashスクリプト内で実行する必要がある場合は、上記と同じことを1行のコマンドで実行できます。
KroniK907

しかし、コマンドを使用するためにデバイスの名前を知る必要があります。parted /dev/sdaまた、呼び出すドライブにパーティションがいくつあるかを知っている必要があります。rm 1ディスクをクリーンアップするコマンドを探しているので、パーティションを再作成できます。 mdをシャットダウンしてlvを削除するなど、手動での作業は一切必要ありません。
c33s 2016年

1)ddコマンドを実行するためにデバイスの名前が何であるかを知る必要があります。dfドライブがマウントされている場合は、grepを実行してください。ドライブの場所を取得できない場合、「スクリプト」の作成をどのように計画しますか?2)実行parted $drive printして結果をgrepし、すべての使用可能なパーティション番号を見つけて配列に格納するのは簡単です。次に、それらの値を使用して実行しますparted $drive rm $partition。これらはすべて、かなり単純なbashスクリプトです。
KroniK907


0

基本的に、このエラー

エラー:/ dev / sdcのパーティション1が書き込まれましたが、おそらくそれが使用されているため、変更をカーネルに通知できませんでした。その結果、古いパーティションは引き続き使用されます。さらに変更を加える前に、今すぐ再起動してください。

ディスクのパーティション分割中に、いくつかのパラメータを見逃した場合に表示されます。このエラーは、パーティショニング中に定義したパラメータを詳しく調べることで修正できます。

を使用して fdisk -l、ディスクのパラメータを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.