Hampir di mana-mana saya mendapatkan kegagalan dalam log mengeluh tentang No space left on device
Log Gitlab:
==> /var/log/gitlab/nginx/current <==
2016-11-29_20:26:51.61394 2016/11/29 20:26:51 [emerg] 4871#0: open() "/var/opt/gitlab/nginx/nginx.pid" failed (28: No space left on device)
Log email Dovecot:
Nov 29 20:28:32 aws-management dovecot: imap([email protected]): Error: open(/home/vmail/emailuser/Maildir/dovecot-uidlist.lock) failed: No space left on device
Output dari df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 ext4 7.8G 3.9G 3.8G 51% /
devtmpfs devtmpfs 1.9G 28K 1.9G 1% /dev
tmpfs tmpfs 1.9G 12K 1.9G 1% /dev/shm
/dev/xvdh btrfs 20G 13G 7.9G 61% /mnt/durable
/dev/xvdh btrfs 20G 13G 7.9G 61% /home
/dev/xvdh btrfs 20G 13G 7.9G 61% /opt/gitlab
/dev/xvdh btrfs 20G 13G 7.9G 61% /var/opt/gitlab
/dev/xvdh btrfs 20G 13G 7.9G 61% /var/cache/salt
Sepertinya ada juga banyak ruang inode. Output daridf -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 524288 105031 419257 21% /
devtmpfs 475308 439 474869 1% /dev
tmpfs 480258 4 480254 1% /dev/shm
/dev/xvdh 0 0 0 - /mnt/durable
/dev/xvdh 0 0 0 - /home
/dev/xvdh 0 0 0 - /opt/gitlab
/dev/xvdh 0 0 0 - /var/opt/gitlab
/dev/xvdh 0 0 0 - /var/cache/salt
Output dari btrfs fi show
Label: none uuid: 6546c241-e57e-4a3f-bf43-fa933a3b29f9
Total devices 4 FS bytes used 11.86GiB
devid 1 size 10.00GiB used 10.00GiB path /dev/xvdh
devid 2 size 10.00GiB used 9.98GiB path /dev/xvdi
devid 3 size 10.00GiB used 9.98GiB path /dev/xvdj
devid 4 size 10.00GiB used 9.98GiB path /dev/xvdk
Output dari btrfs fi df /mnt/durable
Data, RAID10: total=17.95GiB, used=10.12GiB
Data, single: total=8.00MiB, used=0.00
System, RAID10: total=16.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID10: total=2.00GiB, used=1.74GiB
Metadata, single: total=8.00MiB, used=0.00
unknown, single: total=272.00MiB, used=8.39MiB
Apa yang bisa menjadi penyebab hal ini? Saya menggunakan basis linux AMI ec2 kernal versi 4.4.5-15.26.amzn1.x86_64
Memperbarui
Menjalankan perintah yang disarankan di bawah ini btrfs fi balance start -dusage=5 /mnt/durable
memberi saya kesalahan berikut:
ERROR: error during balancing '/mnt/durable' - No space left on device
There may be more info in syslog - try dmesg | tail
Setelah secara manual menghapus banyak file yang lebih besar hingga ~ 1GB saya reboot mesin dan mencoba lagi, memastikan saya menggunakan sudo, dan perintah dieksekusi. Saya kemudian me-reboot mesin saya sekali lagi untuk ukuran yang baik dan tampaknya telah menyelesaikan masalah
Jawaban:
Selamat datang di dunia BTRFS. Ini memiliki beberapa fitur yang menggoda tetapi juga beberapa masalah yang menyebalkan.
Pertama, beberapa info pada pengaturan Anda, sepertinya Anda memiliki empat drive dalam volume "raid 10" BTRFS (sehingga semua data disimpan dua kali pada disk yang berbeda). Volume BTRFS ini kemudian diukir menjadi subvolume pada berbagai titik pemasangan. Subvolume berbagi kumpulan ruang disk tetapi memiliki nomor inode yang terpisah dan dapat dipasang di tempat yang berbeda.
BTRFS mengalokasikan ruang dalam "chunk", sebuah chunk dialokasikan untuk kelas tertentu baik data atau metadata. Apa yang dapat terjadi (dan sepertinya telah terjadi dalam kasus Anda) adalah bahwa semua ruang kosong dialokasikan untuk potongan data tanpa meninggalkan ruang untuk metadata
Tampaknya (karena alasan saya tidak sepenuhnya mengerti) bahwa BTRF "kehabisan" ruang metadata sebelum indikator proporsi ruang metadata yang digunakan mencapai 100%.
Ini tampaknya adalah apa yang terjadi dalam kasus Anda, ada banyak ruang data gratis tetapi tidak ada ruang bebas yang belum dialokasikan ke bongkahan dan ruang kosong tidak mencukupi di bongkahan metadata yang ada.
Cara mengatasinya adalah menjalankan "penyeimbangan". Ini akan memindahkan data sehingga beberapa potongan dapat dikembalikan ke kumpulan gratis "global" tempat mereka dapat dialokasikan kembali sebagai potongan metadata
Angka setelah
-dusage
menetapkan seberapa agresif penyeimbangan kembali, yaitu seberapa dekat dengan mengosongkan blok harus ditulis ulang. Jika saldo mengatakan itu menulis ulang 0 blok coba lagi dengan nilai yang lebih tinggi-dusage
.Jika keseimbangan gagal maka saya akan mencoba me-reboot dan / atau membebaskan beberapa ruang dengan menghapus file.
sumber
ERROR: error during balancing '/mnt/durable' - No space left on device
bahkan setelah menghapus hampir 1 GB dari drivedmesg | tail
dalam posting saya setelah mendapatkan kesalahan baru setelah reboot.Karena Anda menjalankan btrf dengan pengaturan RAID, coba jalankan operasi keseimbangan.
Jika ini memberikan kesalahan karena tidak memiliki cukup ruang, coba lagi dengan sintaks ini:
Ulangi operasi ini untuk setiap sistem file btrfs di mana Anda melihat kesalahan tentang ruang. Jika masalah ruang Anda disebabkan oleh metadata yang tidak didistribusikan di seluruh disk yang dicerminkan ini mungkin membebaskan ruang untuk Anda.
sumber
Refusing to explicitly operate on system chunks. Pass --force if you really want to do that.
Apakah boleh melakukan?-susage=0
opsi.Pada sistem saya, saya menambahkan pekerjaan berikut di cron.monthly.
The
clear_cache
remount ini disebabkan beberapa masalah korupsi btrfs mengalami dengan peta gratis. (Saya pikir mereka akhirnya menemukan masalah, tetapi masalah ini sangat menjengkelkan, saya bersedia membayar untuk membangun kembali peta sebulan sekali.)Saya meningkatkan
usage
opsi untuk membebaskan ruang secara bertahap untuk keseimbangan yang lebih besar dan lebih besar.Jika Anda sampai pada titik di mana Anda tidak dapat menyeimbangkan kembali karena Anda memiliki ruang yang tidak cukup, rekomendasinya adalah untuk sementara menambahkan perangkat blok (atau perangkat loopback pada disk lain) dari beberapa jenis volume Anda selama durasi penyeimbangan kembali, dan kemudian Singkirkan.
sumber
Ini bukan masalah dengan btrf, karena ini adalah sesuatu yang telah dilakukan pada sistem ini. Ini terlihat sebagai hasil dari penyeimbangan kembali yang tidak lengkap dari kebijakan alokasi 'tunggal' menjadi kebijakan alokasi 'raid 10', sebagaimana dibuktikan oleh sejumlah besar blok yang dialokasikan tunggal. Mungkin dimulai sebagai lajang dan kemudian konversi terputus. Kelompok dengan alokasi yang tidak konsisten seperti itu pasti memiliki ... yah, masalah alokasi.
Pertimbangkan bahwa Anda mengonsumsi 61% dari kolam Anda. Kebijakan alokasi Anda adalah RAID10, sehingga akan menghasilkan konsumsi kolam maksimum 50% sebelum mencapai penuh, karena semuanya mereplikasi 2. Inilah sebabnya mengapa konversi Anda dari tunggal ke RAID 10 gagal (dan terus berlanjut). Saya hanya bisa menebak, tapi itu mungkin dialokasikan di tengah penyeimbangan kembali. Tidak ada ruang yang tersisa di perangkat Anda untuk menyeimbangkan kembali ke RAID 10 dengan disk yang Anda miliki. Satu-satunya alasan Anda mencapai 61% adalah karena disk Anda dialokasikan secara tidak konsisten, beberapa linier dengan alokasi tunggal, dan sebagian besar dalam RAID 10.
Anda dapat menyeimbangkan kembali ke kebijakan alokasi tunggal jika Anda ingin mendapatkan ruang tanpa mengubah banyak hal. Anda juga bisa menambahkan lebih banyak disk atau menambah ukuran disk. ATAU Anda bisa, seperti yang telah Anda lakukan dalam kasus ini, hanya menghapus banyak file sehingga kumpulan Anda benar-benar dapat menyeimbangkan ke RAID 10 (karena akan kurang dari 50% dikonsumsi secara keseluruhan). Pastikan Anda menyeimbangkan kembali setelah menghapus file, atau Anda akan tetap memiliki kebijakan alokasi janky ini.
Secara khusus, jalankan RAID 10 ketika menyeimbangkan kembali setelah menghapus file-file itu untuk memastikan Anda menyingkirkan blok-blok yang dialokasikan tunggal itu, seperti:
btrfs fi balance start -dconvert=raid10 -mconvert=raid10 /home
sumber