30

Я заметил, что в ОС, отличной от Windows .... то есть в Linux / Mac я могу делать такие вещи, как:- отправить почтовый индекс другу с целью - удалить файл во время передачи

И передача не подводит.

Или я могу делать такие операции, как .. - запустить фильм - стереть файл - фильм все еще воспроизводится до конца (чтение с диска, а не только буферизация в памяти)

Хотя файлы "удаляются", как я уже упоминал, на самом деле они перемещаются в другое место в файловой системе ... то есть в каталог корзины или что-то в этом роде. Поэтому мне кажется, что ОС использует указатель @ файл, который обновляется при перемещении, а не напрямую обращается к файлам.

Кто-нибудь может пролить некоторый свет на то, как на самом деле реализована эта возможность AWESOME? Я даже не уверен, что Google, чтобы узнать больше об этом.

благодарю вас.

4 ответа4

28

Запись каталога - это просто указатель на индекс. Индод содержит метаинформацию о файле (кроме имени) и указатели на данные файла (если они есть). Когда вы начинаете копировать файл, вы получаете дескриптор для inode.

Операционная система поддерживает количество ссылок на индекс. Пока есть ссылки на индекс, индекс и данные файла сохраняются. Как только все ссылки на индекс будут удалены, индекс будет освобожден, а пространство, необходимое для файла.

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

РЕДАКТИРОВАТЬ: Как уже отмечалось, перемещение файлов на том же устройстве выполняется без перемещения данных. Вместо этого в каталоге назначения создается новая запись каталога, а исходная запись каталога удаляется.

Возможно иметь несколько записей каталога для одного и того же файла. Это так называемые жесткие ссылки. Они создаются путем создания новой записи каталога для файла без удаления исходной записи. Inode файловой системы имеет счетчик ссылок для записи количества записей каталога, указывающих на файл.

РЕДАКТИРОВАТЬ 2: Если процесс завершится сбоем или будет убит, файл будет аккуратно удален, так как количество обращений в памяти будет уменьшено до нуля. Это действие, которое происходит, когда программа заканчивается нормально.

В случае сбоя питания или другого неработающего выключения системы, диск должен быть fsck (проверка файловой системы), прежде чем его можно будет полностью смонтировать. В зависимости от состояния inode на диске и структур каталогов, пространство будет восстановлено, файл останется в каталоге или будет сделана новая запись в каталоге lost+found . Результаты будут зависеть от того, какие изменения были записаны на диск или записаны в журнал файловых систем.

6

Как объяснил Мэтт Дженкинс, ОС (файловая система) отслеживает файлы, которые остаются открытыми приложениями. Пока процесс сохраняет файл открытым, его данные остаются на диске (даже если он был удален и больше не виден или недоступен для других программ).

Обратите внимание, что следствием этого является то, что пространство, занимаемое файлом, может быть восстановлено только после того, как последний процесс, использующий его, закрыл его. Это часто задаваемые вопросы для операций с файловой системой Linux/Unix: «команда df сообщает, что раздел заполнен, а du сообщает о свободном месте» (см., Например, http://batleth.sapienti-sat.org/projects/FAQs/ext3- faq.html ). Если вам нужно освободить место, недостаточно удалить большие файлы (например, файлы журналов), вы также должны убедиться, что ни один процесс не держит их открытыми (обычно это проблема с файлами журналов).

2

Это довольно просто на самом деле. Файл содержит список ссылок - процессов, которые обращаются к файлу. Когда вы удаляете файл, он просто удаляет список из каталога, но не сам файл. Программы, которые все еще имеют открытый файл, могут получить к нему доступ. Файл фактически удаляется только тогда, когда все программы, которые обращаются к нему, закрывают его.

Кроме того, при перемещении файла - если он находится в той же файловой системе - файл фактически не перемещается как таковой, он просто меняет указатель на каталог, в котором находится файл.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .