Bagaimana cara mereset Harddisk (hapus Mbr & hapus Partisi) dari Command Line dengan skrip tanpa me-reboot?

8

Untuk memulai dari keadaan bersih saya perlu mengatur ulang hard disk ke keadaan kosong dari baris perintah.

Ini bukan tentang menjalankan utilitas penghapusan, data tidak harus ditimpa.

Pertanyaan ini sangat mirip dengan Menghapus Semua Partisi Dari Baris Perintah

Solusi di sana bekerja dengan sangat baik,

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

tetapi jika saya ingin bekerja dengan disk yang ditimpa, saya mendapatkan kesalahan bahwa perangkat masih digunakan.

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

atau

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.

Jadi saya harus secara manual menonaktifkan semua yang "duduk" di perangkat

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

setelah itu partprobeperintahnya berfungsi.

apakah ada beberapa perintah yang bekerja lebih sederhana? Suka

harddiskreset /dev/sda

sehingga dapat dengan mudah digunakan pada sistem dengan tata letak partisi / lvm / md berbeda?

c33s
sumber
1
Selain me-reboot, apa yang disarankan untuk Anda lakukan? Apa konteksnya di sini?
Michael Hampton
Saya tidak yakin apakah saya mengerti pertanyaan Anda. saya ingin mem-bootstrap sistem debian dengan skrip bash yang menggunakan pengaturan-penyimpanan. untuk memastikan script selalu berfungsi, harddisk di sistem target harus dikosongkan / reset sebelumnya. Apakah itu konteks yang Anda minta? maka saya akan memperpanjang pertanyaan saya. sepertinya tidak relevan bagi saya, karena saya hanya mencari perintah yang dapat menghapus mbr & partisi dari harddisk ...
c33s
Anda harus menghapus MBR sebelum mengatur partisi. Tampaknya di sini, Anda melakukannya setelah mengaturnya!
Michael Hampton
Ah ha! Saya mendapatkannya. Untuk membuatnya bekerja (dari LiveCD) saya pertama kali harus melakukan ini: sudo wipefs -a / dev / sdb - fdisk -l tidak menunjukkan tabel partisi pada / dev / sdb - lalu - sudo dd if = / dev / sda dari = / dev / sdb bekerja untuk membuat salinan dari drive primer yang dapat di-boot.
SDsolar

Jawaban:

5

The wipefsProgram memungkinkan Anda dengan mudah menghapus tanda tangan partisi-meja:

wipefs -a /dev/sda

Anda masih harus menghentikan proses apa pun menggunakan perangkat, seperti LVM.

Dari man wipefs

wipefs dapat menghapus tanda tangan filesystem, raid atau partisi-table (string ajaib) dari perangkat yang ditentukan untuk membuat tanda tangan tidak terlihat oleh libblkid.

wipef tidak menghapus sistem file itu sendiri atau data lain dari perangkat. Ketika digunakan tanpa opsi apa pun, wipefs mencantumkan semua sistem file yang terlihat dan offset dari tanda tangan dasarnya.

wipef memanggil BLKRRPART ioctl ketika ia telah menghapus tanda tangan tabel partisi untuk memberi tahu kernel tentang perubahan tersebut.

pengguna144437
sumber
2

Saya selalu hanya menggunakan parted untuk ini. Ia bekerja dengan baik untuk mengubah tipe disklabel dan menambah / menghapus partisi, terutama karena ia dapat menangani HDD besar modern tidak seperti fdisk.

Anda bisa lari

$ sudo parted /dev/sda

Ini akan memulai semuanya dan membawa Anda ke terminal berpisah. Anda kemudian dapat menjalankan perintah bantuan untuk menampilkan semua perintah yang tersedia. Cukup jelas.

Saya akan menyebutkan bahwa ya Anda harus memiliki semua partisi disk yang ingin Anda format unmount. Jika Anda hanya mencari cara yang lebih cepat untuk meng-unmount semua partisi, saya kira Anda bisa melakukannya dengan regex di perintah umount tetapi itu tampak konyol.

Menggunakan parted untuk mengelola HDD saya tidak pernah harus memaksa menyegarkan disk atau yang serupa.

Untuk sepenuhnya menyegarkan drive untuk penggunaan baru, saya biasanya melakukan hal berikut:

1) mulai berpisah dengan menjalankan sudo parted /dev/sda

2) menemukan partisi yang ada dengan menjalankan print

3) hapus partisi yang ada dengan menjalankan rm 1penggantian 1 dengan nomor partisi yang ingin Anda hapus. Kemudian ulangi untuk semua partisi yang tersisa pada disk.

4) reset disklabel dengan menjalankan mklabel gptsaya menggunakan tipe label gpt tetapi Anda dapat menggunakan msdos standar atau apa pun preferensi Anda. Berikut adalah daftar tipe disklabel

5) Buat partisi baru dengan menjalankan mkpartIni akan menjalankan Anda melalui panduan membuat partisi. Titik awal dan akhir default untuk sektor. Anda dapat mengubah ini dengan menjalankan unitperintah sebelum menjalankan. mkpartDengan cara ini Anda dapat menentukannya dalam GB atau TB atau MB dll.

6) periksa hasil Anda menggunakan printuntuk melihat info tabel partisi baru Anda

7) Anda kemudian perlu memformat partisi. Ini tidak boleh dilakukan melalui parted walaupun beberapa opsi untuk ini tersedia. Saya akan menyarankan sebaliknya menjalankan quituntuk keluar dari terminal parted dan kemudian menggunakan mkfsuntuk memformat partisi. Ingatlah untuk menjalankan 'mkfs' di / dev / sda1 alih-alih / dev / sda karena Anda memformat partisi dan bukan disk secara keseluruhan.

Itu saja.

Saya harap ini menjawab pertanyaan Anda.

Juga, berikut adalah manual berpisah online untuk referensi: https://www.gnu.org/software/parted/manual/html_node/index.html

EDIT:

OP ingin melakukan hal semacam ini dari naskah dan bukan dari terminal. Anda dapat melakukan jenis prosedur yang sama melalui skrip dengan menjalankan parted melalui perintah baris tunggal alih-alih di dalam terminal parted.

Misalnya perintahnya

$ sudo parted /dev/sda print

Akan mencetak informasi drive dan tabel partisi ke konsol bash yang kemudian dapat dimanipulasi menggunakan grep dll untuk membuat variabel atau apa pun yang Anda inginkan dalam skrip bash.

KroniK907
sumber
saya membutuhkannya otomatis dari skrip tidak manual dari terminal
c33s
Tunggu posting asli Anda tidak menyebutkan skrip. Bagian apa dari ini yang Anda skrip? Saya pikir Anda dapat menjalankan perintah parted tanpa masuk ke terminal parted. Saya tidak yakin tentang itu.
KroniK907
Hanya untuk mengonfirmasi, Anda dapat menjalankan parted dari perintah baris tunggal. Sebagai contoh parted /dev/sda printakan mencetak tabel partisi untuk / dev / sda. Anda dapat melakukan hal yang sama yang saya jelaskan di atas hanya dengan perintah baris tunggal jika Anda perlu melakukannya dalam skrip bash.
KroniK907
tetapi saya harus tahu apa nama perangkat akan menggunakan perintah parted /dev/sdajuga saya harus tahu berapa banyak partisi pada drive untuk memanggil rm 1, saya mencari perintah untuk hanya membersihkan disk, sehingga saya dapat mempartisi ulang, tanpa melakukan semua hal manual mematikan md's menghapus lv's dan sebagainya.
tahun33
1) Anda masih harus tahu apa nama perangkat untuk menjalankan perintah dd ... tidak yakin apa yang Anda dapatkan di sana. Hanya menerjang dfjika drive sudah terpasang. Bagaimana Anda berencana membuat "skrip" jika Anda tidak dapat menemukan lokasi drive? 2) cukup mudah untuk menjalankan parted $drive printdan menangkap hasil untuk menemukan semua nomor partisi yang tersedia dan kemudian menyimpannya dalam array. Kemudian gunakan nilai-nilai itu untuk menjalankan parted $drive rm $partition. Semua hal ini adalah scripting bash yang cukup sederhana.
KroniK907
0

Gunakan versi fdisk non-interaktif yang ditingkatkan, yaitu sfdisk

Untuk menghapus tabel partisi gunakan perintah ini:

sfdisk --delete /dev/sda
Suncatcher
sumber
0

Pada dasarnya kesalahan ini

Kesalahan: Partisi 1 pada / dev / sdc telah ditulis, tetapi kami tidak dapat memberi tahu kernel tentang perubahan, mungkin karena itu / sedang digunakan. Akibatnya, partisi lama akan tetap digunakan. Anda harus reboot sekarang sebelum membuat perubahan lebih lanjut.

muncul ketika Anda melewatkan beberapa parameter saat mempartisi disk Anda. Anda dapat memperbaiki kesalahan ini dengan melihat dari dekat ke parameter yang Anda tetapkan saat mempartisi.

Gunakan: fdisk -luntuk memeriksa parameter disk Anda:

pengguna569959
sumber