
Все файловые системы Linux имеют размер блока 4kb. Допустим, у меня есть 10mb жесткого диска. Это означает, что у меня есть 2560 доступных блоков, и допустим, я скопировал 2560 файлов, каждый из которых имеет размер 1kb. Каждый блок размером 1kb займет 1 блок, хотя он не заполнит весь блок.
Итак, весь мой диск теперь заполнен, но у меня все еще есть 2560x3kb свободного места. Если я захочу сохранить еще один файл, скажем, 1mb, позволит ли мне файловая система сохранить? Будет ли она записывать в свободное пространство, оставшееся в отдельных блоках? Есть ли какая-либо концепция решения этой проблемы?
Буду признателен за разъяснения. Спасибо заранее
решение1
Размер блока по умолчанию был 512 байт с самого первого Linux. За исключением недавнего времени, когда были введены размеры блока 4k для удовлетворения постоянно увеличивающегося размера дисков. Это фактически даже почти диктуется дисковым оборудованием (см. подробнее:https://unix.stackexchange.com/questions/178899/оптимизация-логического-размера-сектора-для-физического-размера-сектора-4096-hdd).
Но по вашему конкретному вопросу: вы правы, что все файлы тратят неиспользованные байты последнего блока на многих типах файловых систем, что особенно расточительно для маленьких файлов. Но btfrs и reiserfs, похоже, справляются, согласноhttps://en.m.wikipedia.org/wiki/Block_suballocation
решение2
Файловые системы могут иметь размер блока от 512 до (обычно) 65536 байт. Размер блока можно указать как параметр mkfs.xxx. Размер блока по умолчанию в большинстве файловых систем Linux - 4096 байт.
Некоторые файловые системы поддерживают упаковку хвоста и/или выделение подблоков. BTRFS, RaiserFS, ZFS, Raiser4 — поддерживают; XFS, Ext2/3/4 — не поддерживают.
Если вы планируете заполнить раздел несколькими небольшими файлами, вы можете сократить неиспользуемое «хвостовое» пространство, уменьшив размер блока до 512 или 1024, или использовать файловую систему, которая поддерживает функцию упаковки хвоста или выделения подблоков.