Apakah ada alasan lain untuk “tidak ada ruang tersisa di perangkat”?

12

Saya menggunakan Dirvish pada sistem server Ubuntu untuk membuat cadangan hd ke drive usb 3.0 eksternal. Sampai beberapa hari yang lalu, semuanya bekerja dengan baik, tetapi sekarang setiap cadangan gagal dengan "tidak ada ruang yang tersisa pada perangkat (28)" dan "sistem file penuh". Sayangnya itu tidak sesederhana itu: Ada> 500 GB gratis pada perangkat.

Detail:

rsync_error:

rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename1>.eDJiD9": No space left on device (28)
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename2>.RHuUAJ": No space left on device (28)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename3>.9tVK8Z": No space left on device (28)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename4>.t3ARSV": No space left on device (28)
[... some more files ...]
rsync: connection unexpectedly closed (2712185 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

log terlihat cukup seperti biasanya sampai menyentuh:

<SomeFilename1>
<SomeFilename2>
<SomeFilename3>
<SomeFilename4>
<PartOfAFilename>filesystem full
write error, filesystem probably full
broken pipe
RESULTS: warnings = 0, errors = 1

Tetapi, seperti dikatakan di atas, ada banyak ruang pada perangkat:

df -h
/dev/sdg1       2.7T  2.0T  623G  77% /mnt/backupsys/shd

dan juga ada banyak inode yang tersisa:

df -i
/dev/sdg1      183148544 2810146 180338398    2% /mnt/backupsys/shd

Perangkat terpasang sebagai rw:

mount
/dev/sdg1 on /mnt/backupsys/shd type ext3 (rw)

Proses berjalan sebagai root.

Saya hampir mengatakan bahwa saya belum mengubah apa pun tetapi itu tidak sepenuhnya benar: Saya telah mengaktifkan acl untuk drive yang saya cadangkan:

/dev/md0 on /mnt/md0 type ext4 (rw,acl)

Mungkinkah itu masalahnya? Jika ya, bagaimana? root masih memiliki akses penuh ke file.

EDIT:

Saya baru saja memeriksa direktori temp:

  • / tmp hanya berisi folder .webmin yang kosong
  • / var / tmp kosong

sistem file tempat direktori-direktori ini berada memiliki banyak ruang dan inode bebas:

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       289G   55G  220G  20% /

df -i
Filesystem        Inodes   IUsed     IFree IUse% Mounted on
/dev/sda1       19202048  167644  19034404    1% /

EDIT2:

Direktori ini cukup besar, tetapi tidak> 2 GB. Yang mana cadangan gagal bahkan bukan yang terbesar, itu berisi 7530 file.

EDIT3:

Satu informasi yang saya anggap tidak relevan ketika memposting pertanyaan ini:

Sehari sebelum cadangan mulai gagal, saya telah mengaktifkan ACL pada sistem file yang dicadangkan. Saya berasumsi sekarang bahwa ini memicu Dirvish (atau rsync) untuk berpikir semua file telah berubah sehingga daftar file yang akan disalin daripada yang ditautkan sangat besar. Ini bisa berarti beberapa buffer terlalu kecil.

Saat ini, cadangan lengkap ke disk kosong berfungsi dengan sempurna. Saya akan mencoba cadangan tambahan berikutnya. Ini akan menunjukkan apakah mengaktifkan ACL adalah penyebab masalahnya.

dummzeuch
sumber
terkait: stackoverflow.com/questions/24671621/no-space-left-on-device
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

4

Kecurigaan saya (lihat EDIT3) ternyata benar: Menambahkan dukungan acl ke sistem file membuat rsync / dirvish berpikir bahwa semua file telah berubah. Jadi alih-alih membuat cadangan tambahan dan hanya membuat tautan keras ke file yang sudah ada, ia mencoba membuat cadangan lengkap yang tentu saja gagal karena hard disk tidak memiliki cukup ruang untuk itu.

Jadi pesan kesalahan itu sebenarnya benar.

Setelah memulai kembali dengan disk cadangan kosong, cadangan tambahan berfungsi seperti sebelumnya.

dummzeuch
sumber
4

Melihat 2% inode yang tersisa membuat saya berpikir tentang cadangan root yang diberlakukan sistem file EXT. Anda mungkin ingin memeriksa ini:

  1. " Ruang yang disediakan untuk root pada sistem file - mengapa? "
  2. " Ukuran yang masuk akal untuk" blok cadangan sistem file "untuk disk non-OS? "

Saya akan mencoba .tar.gz beberapa cadangan lama dengan harapan akan mengurangi jumlah inode yang digunakan.

Vlad GURDIGA
sumber
2
Kolom dfkeluaran sebelum-terakhir adalah persentase dari Inode yang digunakan, sehingga 2% dari Inode digunakan, dan 98% dibiarkan.
Deve
3

Saya melihat bahwa dummzeuch menemukan solusi untuk masalahnya tetapi sebenarnya ada satu lagi kasus yang saya temukan di mana disk dapat memiliki cukup inode / ruang kosong dan masih menunjukkan "tidak ada ruang yang tersisa pada perangkat" ketika mencoba untuk mentransfer direktori tertentu.

Hal ini disebabkan oleh tabrakan hash pada perangkat blok yang diformat dengan sistem file ext4 di mana pengindeksan direktori diaktifkan juga terutama di mana direktori tunggal menampung lebih dari 100 ribu file di dalamnya dan nama file dihasilkan dari algoritma yang sama (file cache, nama file md5sum, dll. .)

Solusi adalah mencoba dengan algoritma pengindeksan direktori lain:

tune2fs -E "hash_alg=tea" /dev/blockdev_name

atau untuk menonaktifkan pengindeksan direktori sepenuhnya untuk perangkat blok itu (dapat merusak kinerja)

tune2fs -O ^dir_index /dev/blockdev_name

Solusi lain adalah melihat apa yang mengisi direktori dengan file-file tersebut dan memperbaiki perangkat lunak.

Solusi yang mungkin adalah membagi konten folder dengan volume file yang besar di dalamnya ke beberapa subfolder terpisah.

Deskripsi lengkap masalah disajikan oleh Axel Wagner di sini

http://blog.merovius.de/2013/10/20/ext4-mysterious-no-space-left-on.html

Bersulang.

VaLentin ChernoZemski
sumber
1

Ada batas ukuran 2GB pada direktori itu sendiri - yaitu jika Anda memiliki banyak file sehingga ukuran direktori> 2GB (BUKAN ukuran file DI direktori), Anda akan memiliki masalah. Karena itu, dengan hanya 2,8M inode yang digunakan, itu seharusnya tidak menjadi masalah. Biasanya terjadi sekitar 15M inode.

Jadi ini mungkin tidak banyak membantu - tetapi coba ext4 di perangkat cadangan Anda?

Rafiq Maniar
sumber
Direktori tidak sebesar itu. Pengeditan benih.
dummzeuch
1
Hasil edit Anda tidak menunjukkan ukuran direktori yang sebenarnya. Coba ini: find /mnt/backupsys/shd -type d -exec ls -ld {} \;untuk melihat ukuran sebenarnya dari direktori.
Jenny D
1

Tingkatkan batas pemirsa Inotify Anda di sysctl:

fs.inotify.max_user_watches = 100000 

Dan reboot, atau lakukan sysctl -wversi itu juga.

Itu biasanya akan melakukannya. Sesuatu memiliki terlalu banyak file yang terbuka di kernel, dan kesalahannya sangat menyesatkan. Dropbox adalah contoh klasik dari ini.

Sirex
sumber
Anda mungkin benar. Sayangnya saya sudah me-reboot komputer karena pembaruan kernel sebelum saya membaca saran Anda. Setelah itu saya memulai pencadangan dan masih berjalan dengan gembira. Saya akan melihat apakah itu selesai dan juga apa yang terjadi dengan yang dijadwalkan berikutnya.
dummzeuch
Ini memperbaiki masalah yang saya lihat - Saya memiliki Dropbox dan apa pun yang didorong oleh inotify akan gagal dengan pesan "Tidak ada ruang tersisa di perangkat".
Steve
0

Saya sarankan Anda untuk memeriksa beberapa hal lain:

  1. Lihat apakah direktori sementara Anda tidak penuh. Kadang-kadang digunakan untuk penyimpanan perantara dan menjadi penuh dengan mudah.
  2. Periksa apakah ada proses yang masih memegang deskriptor ke file yang dihapus. Kemungkinannya kecil karena df melaporkan ukuran yang tepat tetapi tetap saja tidak ada salahnya.
Aditya Patawari
sumber
Dicentang / tmp dan / var / tmp. Lihat hasil edit.
dummzeuch
Lihat juga kuota (batas pengguna). Namun, tidak yakin mengapa Anda menggunakan rsync untuk cadangan lokal. : ~ /
Dennis
0

Saya baru saja menemukan topik ini saat mencari solusi untuk masalah saya.

Memang ada setidaknya alasan lain untuk ENOSPC. Dan saya membukanya dengan rsync juga, sambil menyalin dari sistem file ZFS ke yang EXT4:

rsync: rsync_xal_set: lsetxattr(""/my/file/path"","example.xattr.attribute") failed: No space left on device (28)

Pada kasus ini:

   ENOSPC - There is insufficient space remaining to store the extended attribute.

man 7 xattr menjelaskan:

   In the current ext2, ext3, and ext4 filesystem implementations, the total bytes used by the names and values of all of a file's extended attributes
   must fit in a single filesystem block (1024, 2048 or 4096 bytes, depending on the block size specified when the filesystem was created).

Dalam kasus saya, itu berarti saya harus memformat ulang seluruh sistem file. :-(

João Carlos Mendes Luís
sumber