Bagaimana saya bisa menghapus disk SATA dengan aman dari sistem yang sedang berjalan?

64

Terkadang saya perlu mencolokkan disk ke ruang disk. Di lain waktu, saya memiliki pengaturan yang sangat aneh untuk menghubungkan SSD menggunakan kabel SATA-eSATA di laptop saya sambil menarik daya dari desktop.

Bagaimana saya bisa menghapus disk SATA dengan aman dari sistem? Utas forum Phoronix ini memiliki beberapa saran:

justsumdood menulis:

Droid (noymous) menulis:
Lalu apa yang Anda lakukan di sisi perangkat lunak sebelum mencabut? Apakah ini sederhana "umount / dev / sd" [huruf drive]? setelah melepas perangkat, untuk "mematikan" (atau tidur) unit:

hdparm -Y /dev/sdX

(di mana X mewakili perangkat yang ingin Anda matikan. misalnya: / dev / sdb)

ini akan memberi daya pada drive ke bawah yang memungkinkan untuk melepasnya tanpa risiko lonjakan tegangan.

Apakah ini berarti bahwa cache disk disiram dengan benar dan dimatikan setelahnya?

Saran lain dari utas yang sama:

chithanh menulis:
Semua perangkat keras SATA dan eSATA secara fisik dapat dicolokkan (mis. tidak rusak jika Anda memasukkan / menarik steker).

Bagaimana chipset dan driver menangani ini adalah pertanyaan lain. Beberapa kombinasi driver / chipset tidak menangani hotplugging dengan benar dan memerlukan perintah warmplug seperti yang berikut:

echo 0 - 0 > /sys/class/scsi_host/hostX/scan

Ganti X dengan nomor yang sesuai untuk port SATA / eSATA Anda.

Saya ragu apakah cara yang tepat untuk melakukannya, tetapi saya juga tidak dapat menemukan bukti yang menentangnya.

Jadi, apa cara yang benar untuk menghapus disk yang terpasang dari suatu sistem? Anggap saya sudah melepas semua partisi pada disk dan jalankan sync. Harap tunjukkan beberapa dokumentasi resmi jika memungkinkan, saya tidak dapat menemukan apa pun di pohon dokumentasi Linux, atau wiki Linux ATA .

Lekensteyn
sumber

Jawaban:

82
  1. Lepas semua sistem file pada disk. ( umount ...)
  2. Nonaktifkan semua grup LVM. ( vgchange -an)
  3. Pastikan tidak ada yang menggunakan disk untuk apa pun.
  4. Setelah Anda selesai melakukannya, Anda harus melepasnya dengan aman.

Jika Anda ingin ekstra hati-hati, lakukan echo 1 > /sys/block/(whatever)/device/deletedulu. Itu akan membatalkan registrasi perangkat dari kernel, jadi Anda tahu tidak ada yang menggunakannya saat Anda mencabutnya. Ketika saya melakukannya dengan drive di dalam kandang eSATA, saya dapat mendengar kepala drive diparkir sendiri, sehingga kernel memberitahu drive untuk bersiap-siap untuk dimatikan.

Jika Anda menggunakan pengontrol AHCI, itu harus mengatasi perangkat yang dicabut. Jika Anda menggunakan pengontrol SATA jenis lain, driver mungkin akan bingung dengan hotplugging.

Dalam pengalaman saya, hotplugging SATA (dengan AHCI) bekerja cukup baik di Linux. Saya telah mencabut drive optik, dicolokkan ke hard drive, memindai kesalahan, membuat sistem file dan menyalin data ke dalamnya, melepas dan mencabutnya, dicolokkan dalam drive DVD yang berbeda, dan membakar disk, semua dengan mesin menyala dan berlari.

Wyzard - Berhenti Membahayakan Monica--
sumber
Saya harus mencabut HDD yang ingin saya hapus sepenuhnya. Setelah menarik keluar disk, / dev / sdXY masih muncul. Menulis 1untuk deletemembuatnya menghilang dan aku bisa mendengar disk berputar. Hanya saja hdparm -Ytidak cukup karena /dev/entri masih akan ada. Terima kasih!
Lekensteyn
16
Saya sangat menyarankan untuk selalu mengeluarkan echo 1 > /sys/block/(whatever)/device/deleteperintah karena drive akan memarkir kepala, sepenuhnya menghentikan disk dan menonaktifkan daya pada bus. Jika kepala yang tidak diparkir menyentuh pelat putar, drive dapat dimusnahkan secara permanen.
drumfire
2
Juga - jika smartd kebetulan sedang berjalan, itu ide yang baik untuk mengeluarkan SIGHUP ke proses sehingga memuat ulang info drive. Terutama penting jika Anda mengganti drive karena smartd akan memuat ulang info untuk drive itu dan yang lainnya.
drumfire
1
Hanya satu catatan yang layak disebutkan, echo 1 > /sys/block/(whatever)/device/deletetidak akan berfungsi sudo, kesalahan "Izin ditolak" akan dilemparkan. Anda harus menjadi root yang sebenarnya, jadi gunakan yang biasa susaja.
TranslucentCloud
11
@TranslucentCloud Anda dapat mengirim melalui pipa sudo teeuntuk meniru pengalihan sebagai root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli
5

Kedua bagian itu untuk hal yang berbeda.

Yang pertama adalah untuk mencabut kabel . Yang kedua adalah untuk mencolokkan .

Untuk mencabut kabel, OS akan menyinkronkan data selama operasi unmount. Jadi, jika disk dilepas (dengan asumsi Anda memang memiliki dukungan perangkat keras penuh), Anda dapat mematikan disk lalu mencabutnya tanpa risiko kehilangan data atau korupsi.

Untuk menghubungkan, perangkat harus dikenali secara otomatis. Jika tidak, Anda dapat menjalankan perintah itu untuk memicu pemindaian bus. Setelah perangkat dikenali Anda dapat memasangnya.

Dan biarkan saya tegaskan ini dengan mengatakan saya hanya pernah melakukan hal semacam ini dengan drive USB.

bahamat
sumber
Terima kasih atas jawaban Anda, tetapi saya masih tidak yakin apa tindakan yang tepat. SSD memiliki bidang SMART "Countdown Tidak Aman", hanya mencabutnya tanpa melakukan apa pun tidak terdengar aman bagi saya.
Lekensteyn
3
Jika itu membantu, saya secara rutin menyambungkan hot-plug dan mencabut hot-drive SATA sebagai bagian dari pekerjaan saya, dengan tidak lebih dari memastikan itu dilepas dulu, dan saya tidak pernah mengalami masalah. Itu anekdotal, jadi jangan anggap itu sebagai Injil, tetapi setidaknya beberapa bukti bahwa itu mungkin aman. Bagaimanapun, saya akan menganggapnya sebagai bug kernel jika OS tidak memastikan bahwa data sepenuhnya ditulis pada akhir operasi unmount, terutama di dunia hotplug.
Jander
1
@Lekensteyn, hdparm -Yakan mengurusnya. Pada dasarnya itulah yang dilakukan sistem setiap kali Anda menangguhkan atau mematikan.
psusi
5

bagaimana eject /dev/sdX? Pada pengaturan saya, ini perintah umounts, sinkronisasi dan mematikan drive.

bitvitez
sumber
4
Saya mencoba ini dengan disk yang terhubung melalui eSATA tetapi perintah gagal dengan "tidak hotpluggable" atau sesuatu.
Lekensteyn
1
Afaik eject colokkan pluggable disk dan bukan perangkat. Tergantung pada driver perangkat blok yang mendukung ioctl()operasi yang digunakan oleh ejectalat. Esata hard disk drive tidak mendukungnya, tetapi perangkat optik, disket dan mungkin flash drive, ya.
user259412
2

Saya memiliki sepasang skrip yang dibangun berdasarkan jawaban oleh Wyzard . Yang pertama,, scsi-dropadalah melepaskan satu disk dengan aman:

#!/bin/sh

if test -h "$1"
then
    disk=$(chase "$1")
else
    disk="$1"
fi

if test -b "$disk"
then
    echo 1 >/sys/block/$(basename "$disk")/device/delete
else
    echo "$0: not a block device: $1" >&2
    exit 1
fi

Manfaat utamanya adalah Anda dapat memberikan symlink, seperti yang ditemukan di /dev/disk/by-id/dan itu akan menyelesaikannya ke perangkat nyata. Itu memang perlu chasediinstal; Anda mungkin bisa mendapatkan hasil yang sama menggunakan readlink -e.

Script kedua,, scsi-rescandigunakan setelah hotplugging perangkat baru:

#!/bin/bash

exec tee /sys/class/scsi_host/host*/scan <<<'- - -' >/dev/null

Ini membuat semua adapter memindai ulang perangkat. Itu satu-satunya cara saya berhasil mendapatkan kapasitas dan tabel partisi baru untuk dibaca.

Toby Speight
sumber
0

Sebenarnya, drive SATA memarkir kepala secara otomatis saat daya terputus. Menarik drive saat masih berputar, seharusnya tidak menimbulkan masalah. Namun, disk yang berputar rentan terhadap bantingan jika terbentur. Anda dapat mendengar ini ketika Anda memiliki kekuatan serpihan atau sinar matahari.

Sebagian besar kerusakan biasanya disebabkan oleh, cache yang tidak terhapus dan penulisan yang tidak dikomit di buffer dll ... Ini sebabnya Anda HARUS menghapus drive, sebelum menghapusnya. Perintah SCSI hanyalah ukuran yang baik dan bekerja untuk tujuan yang sama.

spongebob
sumber