Cara terbaik untuk mencegah sistem root terisi ketika mount gagal?

16

Kami memiliki server web internal (tervirtualisasi, hosting ReviewBoard, tetapi tidak super relevan) dan kami memiliki mode kegagalan yang relatif konsisten dengan gagal mount NFS yang menyebabkan / mengisi. Distro adalah Ubuntu (jangan tanya) jika suatu solusi tergantung pada distribusi yang berbeda, itu akan lebih lambat untuk diimplementasikan.

Pencadangan sedang dilakukan ke / mnt / cadangan /, yang seharusnya ke NFS mount ke sistem lain. Sayangnya, ketika mount gagal, atau turun, backup dilakukan pada sistem file root, yang seperti yang Anda bayangkan tidak butuh waktu lama sebelum / penuh, dan kemudian layanan mulai gagal.

Sejumlah solusi yang mungkin telah dibahas.

  1. Monitor / mnt / backup dan pastikan itu bukan root. Mungkin pekerjaan cron.

  2. Gunakan / mnt / protected / backup, dan mount / protected terlebih dahulu ke sistem file kecil, mungkin loop mount ke file lokal sehingga sangat kecil kemungkinannya untuk gagal.

  3. Chmod a-rwx / mnt / backup (titik mount sistem file root). Saya tidak yakin apakah pemasangan pada direktur yang dilindungi akan berfungsi, saya pikir itu berhasil.

  4. Pada pohon yang terpasang, buat direktori yang disebut "Cadangan", lalu tautan lunak "ln - s / mnt / cadangan / Cadangan / Cadangan". Menggunakan / Cadangan untuk cadangan akan gagal kecuali / mnt / cadangan dipasang, karena pohon lokal tidak mengandung sub-direktori.

  5. Melakukan pemeriksaan bahwa direktori telah dipasang dengan benar di skrip cadangan.

Saya tertarik dengan umpan balik tentang pendekatan ini, pro kontra atau teknik tambahan yang digunakan orang sebagai cara standar untuk melindungi sistem file root dari jenis nastiness ini.

Peter
sumber

Jawaban:

13

Nomor 5 - Tes di skrip cadangan Anda untuk memastikan bahwa direktori tersebut dipasang sebelum melanjutkan. Script akan gagal jika mount tidak tersedia atau tidak ada. Atau Anda bisa memastikan semuanya sudah terpasang sebelum menjalankan cadangan.

Coba mountpointperintah, yang memeriksa apakah direktori yang ditentukan adalah mountpoint:

mountpoint -q /mnt/backups || mount /mnt/backups

putih
sumber
Hmm, saya rasa saya akan menambahkan || echo "Mount / mnt / backup gagal" 2> & 1 Atau mungkin hanya ada di sana. Bagaimanapun, terima kasih !!!
Peter
22

Solusi yang paling tahan kesalahan adalah membuat titik mount tidak dapat ditulis. Ini akan menjadi solusi Anda # 3. Namun ada satu langkah tambahan yang harus Anda lakukan. chattr +i /mnt/backups. Ini karena walaupun tanpa izin, root masih bisa menulis ke direktori. Dengan chattr +i(set flag yang tidak dapat diubah) bahkan root tidak dapat menulisnya. Setelah mount sudah terpasang, izin tidak masalah karena izin akan berada di direktori jarak jauh, bukan yang lokal.

Patrick
sumber
1
Itu trik yang cukup rapi - tidak pernah terpikir untuk menggunakan 'chattr'
warren
1
Saya menggunakan teknik ini pada semua poin mount saya.
3dinfluence
1
Saya mencoba ini dengan encfssistem file sekering. Ini memberikan kesalahan:fusermount: user has no write access to mountpoint
ctrl-alt-delor
Ini adalah solusi yang biasanya saya gunakan, dan saya pikir itu harus menjadi jawaban yang diterima.
shodanshok
3

Apa kata ewwhite. Juga, beberapa pemantauan tambahan untuk kesehatan sistem dasar tidak akan menjadi ide yang buruk.

Sesuatu seperti Monit dapat memeriksa untuk melihat seberapa banyak ruang yang tersisa . Jika Anda ingin melakukan pemantauan sistem sepenuhnya, Anda dapat melihat Nagios, tetapi Monit ringan dan akan melakukan hal-hal mendasar.

Karena Anda menggunakan Ubuntu, Monit sudah dalam repo, sehingga Anda dapat melakukan "sudo apt-get install monit", kemudian mulai melihat file konfigurasi untuk mengirimnya ke peringatan di tempat yang tepat, memantau layanan yang tepat, dll. Berikut ini tutorial singkatnya .

cjc
sumber
1

Berikut ini adalah satu liner yang dapat Anda jalankan sebagai pekerjaan cron, mengasumsikan mount yang dimaksud ada di fstab:

if mountpoint -q /mnt ; then : ; else mount /mnt ; fi
dan
sumber
0

Untuk solusi jangka panjang: Tidak yakin bagaimana melakukan ini di Ubuntu (saya RH centric) atau apakah itu layak sementara (jika Anda hanya memiliki satu mesin) tetapi metodologi yang telah bekerja untuk kami selama BANYAK tahun adalah membuat logika terpisah volume, sistem file, bahkan grup volume pada mesin server. Jadi sebagai praktik standar kami membuat volume logis LVM untuk /, / tmp. / usr, / usr / local, / opt, / home, / var, swap space dan partisi terpisah untuk / boot. Pendekatan ini mempersulit sistem file untuk mengisi dan menonaktifkan sistem. Sebenarnya pendekatan ini akan membuat hampir tidak mungkin untuk mengisi sistem / file. Anda masih perlu menonton / tmp, / var tentu saja. Jika kita perlu menyimpan data maka kita membuat grup volume yang sama sekali berbeda untuk itu. Pendekatan ini juga memiliki manfaat lain, memperluas sistem file sesuka hati, memindahkannya, membuat yang baru, dll.

pergelangan kaki
sumber
Jadi solusi Anda untuk mencegah sistem file terisi jika mount gagal adalah menambahkan lebih banyak mount? Apa?
Patrick