Скажи, Джонни делает ПУСТОЙ файл. Это называется foobar.py
. Когда Джонни позволяет это выполнить, он бежит chmod 755 foobar.py
. Файл теперь содержит метаданные
-rw-r--r-- 1 johnny staff 0 Dec 27 22:53 foobar.py
Где все эти метаданные хранятся в этом файле? Размер файла равен 0, так как он хранит метаданные при переносе на другой диск?
Ответы:
Он не хранится в этом файле. Он хранится в файловой системе, и все параметры копируются вручную по одному (хотя некоторые не могут быть скопированы вообще).
То есть большинство операционных систем на самом деле не имеют вызова «копировать файл с метаданными». Программа для копирования файлов просто создает новый файл с именем
foobar.py
, копирует все 0 байтов данных, затем использует utime () или SetFileTime (), чтобы время его модификации выглядело так же, как и у оригинала. Аналогично, права доступа к файлу «копируются» путем установки их заново с помощью chmod () или путем копирования атрибута POSIX ACL.Некоторые метаданные не копируются. Установка собственности требует привилегий суперпользователя, поэтому копии чужих файлы принадлежат вам и занять вашу дисковую квоту. Ctime (время изменения атрибута) невозможно установить вручную в Unix; btime (время рождения / создания) обычно тоже не копируется.
Сравните
cp -a foo bar
(который копирует метаданные) иcp foo bar
(который не копирует ):источник
Обычно он отличается от файловой системы к файловой системе, где хранятся метаданные. В файловых системах семейства ext2 упомянутые вами метаданные (владелец, группа, права доступа, время) хранятся в inode . Индод также хранит (указатели) блоки, которые файл занимает на диске. Индод не хранит имя файла.
Вы можете получить доступ к этим данным с помощью
stat
системного вызова (man 2 stat
) и использоватьstat
инструмент для их печати (man stat
). Подробное описание полей inode можно найтиlinux/include/linux/fs.h
в исходном коде ядра.Существуют другие виды метаданных (например, разрешения ACL ), которые хранятся в разных местах.
Метаданные не копируются по умолчанию при копировании файла. Вместо этого создается новый файл со значениями метаданных по умолчанию. Существуют различные опции для
cp
(-p
,--preserve
), которые также инструктируютcp
копировать метаданные, читая старые метаданныеstat
и изменяя новые метаданные соответственно.источник
В зависимости от файловой системы области зарезервированы (полу) статически или динамически для хранения метаданных, таких как разрешения, размер и другие (иногда также и имя файла).
В Unix метаданные хранятся в inode, управляющем областью данных, в которой находится файл (в то время как имена файлов и соответствующие номера inode хранятся в записи каталога ).
В некоторых файловых системах записи каталога являются файлами, как и любые другие, но скрыты от глаз. FAT и FAT32 являются такими файловыми системами (хотя корневой каталог FAT является «специальным»). Когда вы создаете файл, вы добавляете / редактируете запись в файле, которая описывает папку, в которой находится файл. Каждая запись достаточно велика для хранения размера файла, имени и даты, и ничего больше (длинные имена занимают несколько записей; размер записи по умолчанию 32 байта может содержать одно имя в старом формате символов 8 + 3. Все это, конечно же, при условии, что моя память работает). Система Ext аналогична, но запись каталога имеет динамический размер и содержит только имя и указатель inode; Вся остальная информация находится в inode. Таким образом, две записи могут указывать на один и тот же файл, что полезно для управления дублирующимися файлами.
В некоторых файловых системах inode может быть достаточно большим, чтобы содержать небольшой объем данных в дополнение к метаданным, так что, если файл может туда поместиться, он не займет дополнительное дисковое пространство. Вы создаете 45-байтовый файл, и свободное место на диске не меняется вообще; эти байты хранятся внутри inode. Я думаю, что семейство ext * поддерживает это (и NTFS тоже). Это помогает управлять большим количеством очень маленьких файлов.
В других файловых системах есть что-то вроде «фантомной» файловой системы вдоль основной, которая хранит эти дополнительные атрибуты. Не только информация о файле, но, возможно, и значки файлов .
Некоторые системы имеют и то, и другое: NTFS имеет полные метаданные каталогов, работающие в режиме inode, и возможность создавать альтернативные потоки данных, содержащие дополнительную информацию, которая (очевидно) ничего не меняет в «основном» файле.
источник