Linux, bagaimana cara mengubah status HDD dari ReadOnly setelah crash sementara?

17

Saat ini tidak ada jawaban untuk masalah ini.

Biasanya setelah beberapa masalah dengan pembacaan atau tulisan untuk memblokir perangkat, kernel memutuskan untuk mengganti flag untuk PERANGKAT SELURUH sebagai hanya-baca. Setelah ini setiap tulisan ke partisi / sistem file yang terletak di perangkat ini menyebabkan pergantian sebagai hanya dibaca bersama dengan keadaan perangkat, karena tulisan apa pun tidak mungkin.

Contoh dari dmesg, ini adalah simulasi untuk linux tamu di windows8 menggunakan VirtualBox ketika defrag mengambil gambar perangkat tamu:

[11903.002030] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11903.003179] ata3.00: failed command: READ FPDMA QUEUED
[11903.003364] ata3.00: cmd 60/08:00:a8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11903.003385]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11903.004074] ata3.00: status: { DRDY }
[11903.004248] ata3: hard resetting link
[11903.325703] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11903.327097] ata3.00: configured for UDMA/133
[11903.328025] ata3.00: device reported invalid CHS sector 0
[11903.329664] ata3: EH complete
[11941.000472] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11941.000769] ata3.00: failed command: READ FPDMA QUEUED
[11941.000952] ata3.00: cmd 60/08:00:c8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11941.000961]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11941.001353] ata3.00: status: { DRDY }
[11941.001504] ata3: hard resetting link
[11941.320297] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11941.321252] ata3.00: configured for UDMA/133
[11941.321379] ata3.00: device reported invalid CHS sector 0
[11941.321553] ata3: EH complete
[11980.001746] ata3.00: exception Emask 0x0 SAct 0x11fff SErr 0x0 action 0x6 frozen
[11980.002070] ata3.00: failed command: WRITE FPDMA QUEUED
[11980.002255] ata3.00: cmd 61/18:00:28:23:59/00:00:00:00:00/40 tag 0 ncq 12288 out
[11980.002265]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
-------------------
There are many other errors, like "lost write page", "Journal has aborted", "Buffer I/O error", "hard resetting link" and many others.

Setelah ini, remount penyebab:

mount / -o remount,rw
mount: cannot remount block device /dev/sda1 read-write, is write-protected

karena perangkat WHOLE sda menjaga rootfs sda1 SIAP.

Dalam pengalaman saya ini terjadi dalam situasi:

  1. HDD benar-benar rusak. Masalah penulisan yang dikembalikan tergantung pada kondisi HDD
  2. Mesin host kelebihan beban, maka tulisan HDD virtual guest linux akan habis
  3. Kabel FC atau perangkat SAN (disk array di atas Fibre Channel) kelebihan beban
  4. Koneksi terputus sesaat melalui FC atau FCoE. Mungkin paket FC hilang / habis waktu

Pada situasi ini perangkat benar-benar read-write, tetapi kernel linux menandai perangkat ini secara internal sebagai read-only dan digunakan sebagai read-only. Ini adalah fungsi kernel yang dibuat untuk pencegahan kerusakan, tetapi hanya bisa digunakan pada 1. point.

Pertanyaan adalah. Bagaimana cara memberitahu kernel secara manual, perangkat hdd block beroperasi secara normal?

Ketahuilah ini, perangkat kernel berfungsi sebagai read-only, seperti 'CD-ROM', dan tidak ada perintah lain yang dapat berfungsi dengan baik, termasuk mount / remount -untuk read-write, fsck dan lainnya.

Ansvers yang tidak dapat digunakan, benar-benar memenuhi syarat sebagai spam dari orang yang ingin membantu, tetapi tidak mengerti tentang sifat masalah:

  1. Coba remount sebagai baca-tulis (tidak mungkin, perangkat adalah RO)
  2. fsck ini (untuk apa perangkat RO, tidak ada perbaikan yang mungkin)
  3. 'Aku tidak tahu' (pertama dengan akal, tetapi tidak dapat digunakan)
  4. 'Ganti perangkat Anda' * (biasanya masalahnya adalah hal lain)

Adakah formula untuk pertanyaan di atas? Ganti bendera untuk perangkat blok yang dapat ditulisi yang mengembalikannya dari status baca-saja menjadi baca-tulis? Pada saat ini sepertinya tidak ada yang tahu caranya.

Ini adalah beberapa solusi, tetapi biasanya semiusable atau tidak dapat digunakan:

  1. Remove module mendukung akses ke hdd atau array penyimpanan yang ditentukan. Sayangnya biasanya perangkat yang rusak menyimpan rootfs, atau driver membuat perangkat dan perangkat yang rusak tetap rootfs
  2. Hapus akses FC ke perangkat dan gabung ini lagi (fctools), tidak mungkin, tidak selalu berfungsi.
  3. Mulai ulang mesin SELURUH. Biasanya hanya ini yang mungkin dan kita selalu terpaksa.

Pada poin 1. dan 2. kami memberi tahu kernel bahwa kami sepenuhnya memutuskan perangkat dan menghubungkannya lagi. Kernel mengenali ini sebagai bergabung dengan perangkat yang beroperasi dengan benar. Kita dapat mensimulasikan ini menggunakan perangkat USB dan daya penghapus sesaat. Poin 3. adalah kesempatan terakhir dan biasanya berhasil. Tapi mengapa kita harus me-restart semua? Sayangnya, kami kehilangan semua pembaruan jurnal dan buffer kotor.

Perhatikan, pada situasi yang sama saya tidak memiliki masalah dengan Windows (desktop dan server).

Znik
sumber
Bukan jawaban, tetapi mungkin terkait dalam kasus # 2 (beban host tinggi, batas waktu hdd tamu): Tingkatkan batas waktu hdd Linux untuk mencegah korupsi sistem file yang disebabkan oleh batas waktu hdd pada sistem tamu.
basic6
@Znik, apakah mesin virtual tamu ini berjalan di Citrix XenServer? Atau perangkat keras fisik? StorageServer kami menjembatani dari tanah ethernet ke tanah mini-sas. Ketika mesin jembatan ini panik, itu harus reboot paksa. VM tamu Windows kembali. Mesin virtual guest Linux menunjukkan masalah yang sama persis dengan yang Anda miliki. Tidak ada yang disarankan di sini membawa poin mount kembali ke rw.
rjt
@ rjt, ini terjadi dalam banyak situasi. Situasi utama adalah ketika perangkat mengalami perlambatan ekstrem dengan masalah apa pun, seperti kerusakan fisik, kelebihan perangkat, pemasangan kabel, FC eksternal yang melebihi Eth dan eth kelebihan beban, kadang-kadang beralih reset ketika blok transfer, batas waktu, paket yang hilang dll. Perangkat biasanya masih terlihat, tetapi ditandai sebagai hanya dibaca. Reboot bukan resolusi, itu solusi seperti yang saya jelaskan di pertanyaan utama / deskripsi masalah.
Znik

Jawaban:

12

coba dengan blockdev --setrwatauhdparm -r 0

Jose Luis Martin
sumber
terima kasih, ini harus bermanfaat. Saya menunggu batas waktu pada fc controller
Znik
Bagian penting yang perlu ditambahkan: Kadang-kadang perlu dilakukan fsckpada sistem file read-only, sebelum dapat dipasang lagi.
Evi1M4chine
3
Jangan bekerja untukku. Saya punya masalah serupa
jonneymendoza
1
Tidak bekerja untuk saya bahkan dengan fsck. Tamu Citrix XenServer Linux.
rjt
Tidak bekerja! Perintah ini tampaknya efektif, tetapi dongle masih RO. (ini adalah perangkat lunak, tetapi dari mana ???) Jika Anda ingin mencoba, ambillah Debian iso 9.4.
Sandburg
5

Seperti yang disarankan Jose Luis Martin menggunakan blockdev, 2cent saya adalah melakukan remount rw dan forcefsck

(dengan asumsi sda adalah disk Anda)

blockdev --setrw /dev/sda
mount /dev/sda -o remount,rw
touch /forcefsck
Roberto
sumber
1
Lebih masuk akal untuk hanya menjalankan fscksebelum mount, karena akan gagal untuk me-mount tanpa fsck. (Setidaknya dalam kasus saya itu.)
Evi1M4chine
`# blockdev --setrw / dev / xvda1 # # touch / tmp / date +%Y%m%d-%H%M%Stouch: tidak dapat menyentuh? / tmp / 20170722-221904 ?: Sistem file Read-only # # mount -o remount, rw / dev / xvda1 [137010.709883] EXT4 -fs error (device xvda1): ext4_remount: 4824: Abort yang dipaksakan oleh pengguna mount: tidak dapat remount blok perangkat / dev / xvda1 read-write, dilindungi oleh penulisan `
rjt
2

Periksa halaman wiki ini, ini menjelaskan kesalahan yang dilemparkan oleh libata:

https://ata.wiki.kernel.org/index.php/Libata_error_messages

Dari apa yang saya lihat di atas, Anda mendapatkan masalah batas waktu dan sesuai dokumen yang disebutkan:

Pengontrol gagal merespons perintah ATA aktif. Ini bisa jadi penyebab apa saja. Paling sering hal ini disebabkan oleh bug subsistem interupsi yang tidak terkait (coba boot dengan 'pci = nomsi' atau 'acpi = off' atau 'noapic'), yang gagal mengirimkan interupsi ketika kami mengharapkannya dari perangkat keras.

Anda mungkin ingin menonaktifkan ACPI (periksa cara mendasarkan pada distro Anda) atau memeriksa kernel Anda untuk bug yang diketahui dan mungkin memperbaruinya jika itu bukan yang terbaru (atau menurunkan versi itu).

UnX
sumber
Ya, ini benar-benar batas waktu. Biasanya ini terjadi pada pengontrol FC ketika perangkat array kelebihan beban. Anda benar, pada subsistem ATA lokal ini biasanya ada bug perangkat keras atau implementasi driver / chipset
Znik
Jadi ini timeout? Apa yang sudo hdparm -I /dev/sdX | grep lockeddikatakan? Itu harus mengatakan: 'tidak dikunci'. Ini menunjukkan timeout penuh teka-teki ini di masa lalu di sini setiap kali HDD dikunci oleh kata sandi ATA (karena penghapusan keamanan sebelumnya dan sistem crash kemudian yang menyebabkan server keamanan tidak dibersihkan lagi). Hal-hal kata sandi ini benar-benar memiliki dampak besar , juga pada saraf Anda. :) Bahkan alat standar yang dikirimkan oleh vendor drive HD Anda berperilaku gila-gilaan, seolah-olah HDD akan mati ketika kata sandi aktif. Penyebab kerontokan rambut yang tak terhitung jumlahnya selama bertahun-tahun.
syntaxerror
1

Reboot di windows 10, buka opsi daya dan matikan shutdown cepat. lalu reboot ke linux ..gbamm semuanya baik-baik saja.

shutdown cepat di windows 10 hibernasi beberapa file dan drive sebagian digunakan. jadi linux see sama sibuknya.

awas
sumber