web-dev-qa-db-ja.com

再起動せずにスクリプトを使用してコマンドラインからハードディスクをリセット(Mbrを削除してパーティションを削除)する方法

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

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

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

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

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レイアウトのシステムで簡単に使用できますか?

8
c33s

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

wipefs -a /dev/sda

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

man wipefs

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

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

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

5
user144437

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

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

$ Sudo parted /dev/sda

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

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

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

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

1)Sudo parted /dev/sdaを実行して別れを始める

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

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

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

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スクリプトに必要なものを作成できます。

2
KroniK907

sfdisk であるfdiskの改良された非インタラクティブバージョンを使用します。

パーティションテーブルを消去するには、次のコマンドを使用します。

sfdisk --delete /dev/sda
0
Suncatcher