ext4: Как учесть пространство файловой системы?


16

Я недавно отформатировал диск объемом 1,5 ТБ с намерением заменить ntfs на ext4.

Затем я заметил, что сохраненные файлы не помещаются в новый раздел.

df:

ext4 (ext3 & ext2 show the same behavior)
Filesystem      1K-blocks   Used  Available Use% Mounted on
/dev/sdb1      1442146364   71160 1442075204    1% /media/Seagate

ntfs (similar to all other options that gparted offers):
/dev/sdb1      1465137148  110700 1465026448    1% /media/Seagate

Разница в 1 Кбайт означает, что пространство на 22 ГБ меньше, чем у нас.

Я уже выполнил

tune2fs -O \^has_journal
tune2fs -r 0
tune2fs -m 0

с неудивительно, что никакого эффекта, поскольку это не влияет на блоки, которых просто нет.

Тем не менее, fdisk сообщает, что раздел ext4 охватывает весь диск.

fdisk -l /dev/sdb:

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1  2930277167  1465138583+  ee  GPT

И, например, например, resize2fs сообщает, что "нечего делать!"

dumpe2fs -h /dev/sdb1:
dumpe2fs 1.41.14 (22-Dec-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          d6fc8971-89bd-4c03-a7cd-abdb945d2173
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              91578368
Block count:              366284288
Reserved block count:     0
Free blocks:              360518801
Free inodes:              91578357
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      936
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Sat May 21 17:12:04 2011
Last mount time:          Sat May 21 17:15:30 2011
Last write time:          Sat May 21 17:24:32 2011
Mount count:              1
Maximum mount count:      32
Last checked:             Sat May 21 17:12:04 2011
Check interval:           15552000 (6 months)
Next check after:         Thu Nov 17 16:12:04 2011
Lifetime writes:          1372 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      c334e6ef-b060-45d2-b65d-4ac94167cb09
Journal backup:           inode blocks

Что использует это недостающее пространство?

Ответы:


21

Посмотрим. Размер устройства составляет 1 465 138 583½ кБ = 1 500 301 909 504 Б. Файловая система состоит из 366 284 288 блоков по 4096 В каждый, что составляет 1 500 300 443 648 Б. Я не знаю, для чего используются оставшиеся 1 465 856 В (1,4 МБ) (дополнительные копии суперблока). ? Я знаю, что в начале есть несколько килобайт места для загрузчика.)

Файловая система содержит 91 578 368 inode по 256 байт каждый, что занимает 23 444 062 208 B (около 22 ГБ, подсказка, подсказка). Тогда есть 1442,146,364 кБ = 1,476,757,876,736 B для содержимого файла. Это составляет 23 444 062 208 B + 1 476 757 876 736 B = 1 500 201 018 944 B. Оставшийся размер составляет 98 504 704 B = 24 029 блоков, что находится в нужном диапазоне, соответствующем размеру журнала.

Как видите, все учтено. (Хорошо, почти все, но мы говорим мегабайты, а не гигабайты.)


1
Спасибо, это конечно. (То, как вы это представляете, также совершенно очевидно - мне следовало бы подумать об этом немного больше.) Поэтому я воссоздал раздел с помощью «mkfs.ext4 -m 0 -O sparse_super -T largefile4», поскольку он должен содержать только несколько тысяч больших файлов. файлов, теперь доступно 357728 inode-ов против 1464880364 блоков.
Разное

13

Прежде всего, разница в доступном пространстве, которое вы видите, вовсе не означает, что пространство «потрачено впустую»; он не теряется, потому что для функционирования файловой системы принципиально важно. Вы не должны сравнивать Ext4 и NTFS таким образом без очень большого «но», определяющего все конструктивные и структурные различия между файловыми системами, а также специфику каждой реализации (например, как каждый драйвер сообщает о свободном пространстве на слой VFS).

Представьте раздел как огромное пространство, в которое вы можете поместить любые фрагменты данных, которые у вас есть. Если у вас есть только один фрагмент данных с размером, равным разделу, вы можете просто записать его, начиная с начала раздела, и быть в курсе этого. Но ты не. Вместо этого у вас могут быть тысячи маленьких файлов, и все эти файлы сгруппированы по-разному, и каждый файл связан со многими другими небольшими фрагментами данных (имя, дата / время и разрешения) и т. Д. Вы должны организовать большое пространство разделить, чтобы вы могли быстро и эффективно получить доступ ко всем этим частям данных. Кроме того, вы должны заботиться о том, как писать новые фрагменты данных и эффективно отбрасывать старые фрагменты данных. Вам нужны структуры данных .

И там очень много структур данных . Некоторые из них очень тупые, другие позволяют быстрее извлекать данные за счет более медленных операций записи, другие позволяют выполнять запись быстрее за счет операций чтения, некоторые по-прежнему могут быть очень хорошими как при чтении, так и при записи, но требуют длительных пауз и время простоя при перестановке данных и т. д.

Вам, безусловно, нужна система, которая:

  1. Очень быстро записывает информацию о нем;
  2. Очень быстро извлекает информацию из него;
  3. Умеет организовывать и управлять хранящейся в нем информацией;
  4. Хорошо использует пространство (раздел), где хранится файловая система;
  5. Устойчив к аппаратным проблемам, так что вы по-прежнему получаете большую часть или всю информацию обратно при частичных сбоях системы;
  6. Устойчив к программным проблемам, поэтому ошибка в приложении или в установленном вредоносном приложении не повредит ваши данные навсегда;
  7. Устойчив к человеческим ошибкам, так что прощает вас, когда вы случайно приказываете системе удалить то, что вы не должны (например, корзину / корзину).

Высокопроизводительные файловые системы обеспечивают очень быстрое чтение и запись за счет некоторого места. Некоторые из самых быстрых структур данных, используемых в файловых системах, такие как хеш-таблицы и B-деревья , очень сложны и резервируют больше места, чем фактически используется для обеспечения очень быстрого доступа.

Ext4 имеет и другие важные свойства. В файловой системе нет единой точки отказа. Есть много копий критических данных, распространяемых по разделу, в то время как некоторые другие файловые системы (я не могу сказать для NTFS) могут сделать все ваши данные нечитаемыми, если сбой произойдет в правильном месте. Кроме того, Ext4 резервирует много места для ваших данных прямо на этапе создания файловой системы, в то время как NTFS растет с вашими данными.


1
Спасибо, последняя часть имеет решающее значение. Я не знал, что ext4 выполняет (сравнительно) большую часть работы во время создания, что делает ntfs во время работы.
Разное

1
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! 
The util fdisk doesn't support GPT. Use GNU Parted.

Это сообщение указывает, что диск использует разделение в стиле GPT, и этот fdiskинструмент понимает только устаревший стиль MBR.

Чтобы предотвратить случайное переформатирование, если диски с разделами GPT подключены к более старым системам, не поддерживающим GPT, схема разбиения GPT включает в себя «защитную MBR»: полностью фальшивую таблицу разделов, которая в основном говорит «этот диск полностью используется типом раздела, который вы не знаю ничего о "любой операционной системе или инструменте, который понимает только разбиение MBR.

Чтобы получить точное отображение таблицы разделов /dev/sdb, используйте:

parted /dev/sdb print
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.