Menampilkan ruang kosong filesystem yang tersedia untuk pengguna root

12

Secara default, Linux menyimpan sebagian kecil dari sistem file untuk pengguna root, setidaknya pada ext4 (untuk mencegah pengguna biasa mengisi drive sepenuhnya dan menabrak sistem, dan untuk mengurangi fragmentasi). Namun, dfhanya menampilkan ruang kosong yang terlihat oleh pengguna biasa (bahkan ketika dijalankan sebagai root). Bagaimana Anda menampilkan ruang bebas "nyata", yang dapat diakses untuk melakukan root?

Siput mekanik
sumber

Jawaban:

6

Saya tidak yakin ada alat bawaan, tetapi dengan asumsi Anda telah meninggalkan cadangan di default 5% maka ini akan memberi tahu Anda:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

dfroot, grepuntuk baris dengan dev di dalamnya (untuk menghapus header), cutukuran dan bidang yang tersedia, kemudian gunakan awkskrip untuk menghitung 5% dari ukuran disk yang ditambahkan ke yang tersedia.

Anda dapat menarik reservasi yang sebenarnya dari tune2fs -l <device>dan menggabungkan ini dengan yang di atas dalam skrip.

Paul
sumber
2
Benar, sehingga perintah berikut akan memberitahu kita berapa banyak ruang partisi dicadangkan untuk pengguna privilegied: tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". Misalnya untuk partisi "penyangga multimedia" saya: Block count: 2621440dan Reserved block count: 128449: 4,9% dari blok yang tersedia (pengaturan konservatif untuk membantu mencegah fragmentasi).
tuk0z
Tidak perlu menggunakan cutperintah: Anda dapat memilih bidang awksecara langsung. Sebenarnya cutperintah itu tidak bekerja untuk saya seperti yang diharapkan. Bagaimanapun, saya memberikan jawaban lain yang seharusnya memberikan jawaban yang lebih tepat.
jarno
1
Jalankan tune2fs -m <percentage> <device-name>untuk mengubah ruang disk yang disediakan hanya untuk penggunaan root.
luka5z
1
Terinspirasi oleh hal di atas, saya menemukan ini untuk menghitung ruang yang disediakan pada volume root di MB:sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
mp3foley
Ini bukan jawaban portabel. Periksa di bawah untuk jawaban yang Anda butuhkan (spoiler: tune2fs /dev/sda1atau bahkan lebih baikstat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
trs
17

Dengan menggunakan perintah tune2fs (ditemukan di / sbin / tune2fs ), Anda dapat dengan mudah menentukan ruang yang dipesan : (dan banyak lagi!)

tune2fs -l /dev/sda1

Saya akan memberikan info sistem saya untuk referensi, saya akan menghapus garis asing yang tidak penting untuk pertanyaan ini:

Header ... dan nama volume, saya beri label semua drive saya, membuatnya mudah untuk diidentifikasi jika diperlukan.

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

BENAR-BENAR ingin ini mengatakan "bersih" saat sistem sedang berjalan. Jujur!

Filesystem state:         clean

Di sinilah informasi kapasitas penyimpanan data dimulai:

Di sini Anda dapat melihat bahwa saya memiliki total 121.179.648 blok ... dengan ukuran blok 4K (4096), yang berlipat ganda menjadi sejumlah besar (462-ish GB). (Ukuran blok tercantum di bawah ini)

Block count:              121179648

Dan blok yang dicadangkan ... dengan melihat angka di atas, dan angka di bawah ini ... Anda harus dapat dengan relatif cepat mengetahui bahwa saya telah memesan 1%. Dalam hal ini (4,62-ish GB)

Reserved block count:     1211796

Berapa banyak ruang kosong yang tersedia saat ini? Disini!

Free blocks:              104090586
...

Dan semua ukuran blok penting. Berguna untuk mengalikan.

Block size:               4096
...

Baris-baris ini mengatakan SIAPA blok dicadangkan untuk ... pengguna 0, root, dalam hal ini

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

Ada banyak informasi yang tersedia di sini, tetapi ini akan memberi Anda kemampuan untuk dengan cepat memastikan berapa banyak tersedia, dan berapa banyak lagi yang dicadangkan untuk root. Matematika sederhana.

Semoga ini membantu. Ingat ... halaman manual adalah teman Anda.

lornix
sumber
2

Ini menampilkan ruang kosong dalam byte di partisi yang terkait dengan "/ jalur"

printf '%s' $(($(stat -f --format='%f*%S' /path)))

Anda tidak harus menjadi pengguna super untuk menjalankannya.

BTW Saya tidak begitu mengerti apa perbedaan antara

Ukuran blok% s (untuk transfer lebih cepat)

% S ukuran blok dasar (untuk jumlah blok)

dalam penggunaan stat.

jarno
sumber
Keren - apakah akun ini untuk ruang yang disediakan untuk root?
Paul
@ Paul ya, sudah termasuk
jarno
Output Anda secara efektif adalah jumlah - sehingga Anda dapat menyalurkan output ke bcuntuk mendapatkan jumlah byte, atau bahkan digunakan --format='%f*%S/1024/1024/1024' | bcuntuk mendapatkan kilobyte / megabita / gigabita tergantung pada berapa banyak divisi yang Anda pilih.
Paul
@ Paul Yah, saya akan menyebutnya produk. The prefiks biner disebut kibibyte, mebibyte dan gibibytes, masing-masing. Perluasan aritmatika di sekitarnya $(( ... ))melakukan perhitungan, tetapi hanya menghasilkan bagian bilangan bulat dari hasil bagi (jika Anda menambahkan pembagian). Atau maksud Anda shell Anda tidak mendukung ekspansi aritmatika?
jarno
@ Paul Tapi, jika Anda menggunakan bc, sebaliknya, Anda bisa mendapatkan hasil bagi dengan presisi sewenang-wenang, jika Anda membutuhkannya.
jarno