Почему текстовый файл поднимает по крайней мере 4 КБ, даже когда существует всего один байт текста в нем?

Что-то еще, что Вы могли бы попробовать, является инструментом, названным автопереходом. Это сохраняет базу данных вызовов к, он - псевдоним (j по умолчанию) и попытки принять интеллектуальные решения относительно того, где Вы хотите пойти. Например, если Вы часто вводите:

j ~/Pictures

Можно использовать следующее для получения там в повышении:

j Pic

Это доступно из Debian и Ubuntu, и включенный на основе в расчете на пользователя в ~/.bashrc или ~/.zshrc по умолчанию.

48
12.11.2019, 17:39
3 ответа

Размер блока файловой системы должен составить 4 КБ. Когда данные записаны в файл, который содержится в файловой системе, операционная система должна выделить блоки устройства хранения данных для содержания данных, которые будут записаны в файл.

Как правило, когда файловая система создается, устройство хранения данных, содержавшееся в той файловой системе, сегментируется на блоки фиксированного размера. Эта статья Wikipedia кратко объясняет этот процесс.

Базовый размер блока файловой системы для этого файла должен иметь 4K размер блока байта. Этот файл использует 1 4K блок, и только один байт в том блоке содержит фактические данные.

54
27.01.2020, 19:34
  • 1
    комментарий: В Windows фактический размер файла отображен по умолчанию, и размер на диске отображен в области Options. –  Joe Z. 22.01.2013, 03:11
  • 2
    так блок может разместить различные файлы? –  sudeepdino008 27.02.2018, 07:56

Все файловые системы имеют кластер или размер блока или самое маленькое количество дискового пространства, которое может быть выделено для содержания файла. Даже если фактический размер файла будет меньшим, чем кластер/размер блока, то он все еще использует один кластер или 4K в Вашей файловой системе. Размер кластера зависит от файловой системы и опций файловой системы.

Если это содержит нулевые байты, как Gilles указал, это использует нулевые блоки/кластеры, но один inode на типичном *отклоняет файловые системы, который лучшие ответы протест, "если это не пробел".

13
27.01.2020, 19:34
  • 1
    , “Даже если размер файла является нулевыми байтами, он все еще использует один кластер”. На самом деле, нет: в типичных файловых системах Unix пустой файл использует один inode и нулевые блоки, и нет никакого понятия кластера, который отличается от блоков. –  Gilles 'SO- stop being evil' 22.01.2013, 00:36

Мало эксперимента, чтобы помочь проиллюстрировать это:

Во-первых, давайте посмотрим, каков фактический размер блока моего корня ext4 (LVM) раздел:

[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size:               4096

Это 4096 (4 кибибайта), как ожидалось. Теперь, давайте создадим три файла: первыми являются нулевые байты, вторым является всего один байт, и третьими составляют 4 кибибайта (размер блока):

[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096


Теперь, мы ls каталог. Мы используем -s опция видеть выделенный размер (крайний левый столбец), в количестве 1 024-байтовых "блоков".
(ls не знает, что реальный размер блока 4096 - мы могли указать --block-size но это масштабирует все тем значением, и мы хотим видеть фактический размер файла в байтах, также).

[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root    0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root    1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin

Две вещи могут быть отмечены здесь:

  • Нулевой файл байта поднимает нулевые блоки в файловой системе, подтверждая то, что заявил Giles.
  • Даже при том, что другие два файла имеют различные размеры файла, они оба поднимают 4*1024 = 4 кибибита ext4 блок.

Редкие файлы

Редкие файлы являются файлами с большими блоками нулей. Поскольку данные, как известно, являются всем нулем, нет никакого смысла в хранении его на диске. Таким образом очевидный размер файла может на самом деле быть больше, чем дисковый размер.

Встроенные данные

Обратите внимание, что некоторые файловые системы позволяют содержанию очень маленькие файлы, которые будут сохранены в самом inode. Посмотрите, что действительно ли возможно хранить данные непосредственно в inode на Unix / файловая система Linux?.

8
27.01.2020, 19:34
  • 1
    Да Вы довольно корректны, 4k является размером использование файловой системы для хранения информации относительно передозировки устройства хранения данных файл в файловой системе. Вещи, такие как индекс файла с начала блока, индекс блока и размер памяти, используемой файлом, хранятся, которые съедают 4k. Эта информация используется для ссылки на текстовый файл от файловой системы. –  pvn 22.01.2013, 06:24
  • 2
    Это неправильно. Метаданные файла как Вы упоминание "не съедают" ни одного из 4 кибибитов. Те структуры являются частью форматирования файловой системы наверху. См. мой ответ выше для доказательства. Если бы то, что Вы сказали, было верно, то моему 4 096-байтовому файлу был бы нужен больше чем один блок. указатели –  Jonathon Reinhart 22.01.2013, 06:55
  • 3
    на файл (сегмент не, blk не) в файловой системе являются вещами, которые должны быть сохранены и потребовать, чтобы один блок был присвоен. Если текстовый файл, имеет очень меньше содержания, которое может поместиться в первый блок, уже присвоенный ему, то он не потребует второго выделения блока. Я соглашаюсь, что весь 4k не используется для метаданных, и некоторая внутренняя фрагментация возникает. –  pvn 22.01.2013, 07:19
  • 4
    я говорю, что ни один из размера блока на 4 кибибайта не используется для метаданных. Я думаю, что мой пример доказывает это. –  Jonathon Reinhart 22.01.2013, 07:51
  • 5
    @pvn: Jonathon прав. Метаданные хранятся в inode для файла, который является отдельным от блока, используемого, чтобы хранить данные файла. –  Mechanical snail 07.02.2013, 05:49

Теги

Похожие вопросы