1

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

Что происходит, когда я перемещаю одну из папок в другую файловую систему на другом диске?

Я на Mac OSX снежный барс, и я использую команду mv командной строки.

2 ответа2

0

Заметка

папки в одной файловой системе, которые были жестко связаны друг с другом

Обычно в Unix жесткие ссылки на каталоги вместе не поддерживаются. Я предполагаю, что вы имеете в виду "файлы в одном каталоге являются жесткими ссылками на файлы в другом каталоге".


поведение mv

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

Сравните этот ответ Unix & Linux SE. Соответствующая часть:

Переход между файловыми системами (не имеет значения, находится ли он на одном физическом носителе или нет) обрабатывается как копия файла с последующим удалением. На самом деле это именно то, что делает команда mv . Очевидно, это означает, что целевая файловая система должна создать новую копию файла.

После того, как копия сделана, mv удаляет источник аналогично rm . Это относится:

rm просто удаляет указатель Если у вас есть несколько указателей на файл (жесткие ссылки), то удаление одного из этих указателей с помощью команды rm оставляет другие нетронутыми, а данные остаются доступными.

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

Если вы переместите все жестко связанные файлы, все они исчезнут из исходной файловой системы и появятся в целевой. Имейте в виду, что даже один mv (перемещение нескольких файлов) будет создавать каждый новый файл отдельно, они больше не будут жестко связаны друг с другом. Теоретически mv может выполнять дополнительную работу по обнаружению жестких ссылок и воссозданию их в целевой файловой системе, но это не так (как показано в этом другом ответе).


Перемещение жестких ссылок для получения жестких ссылок

Существуют и другие инструменты, воссоздающие жесткие ссылки, tar является одним из них (хотя я не могу точно сказать, работает ли tar в Mac OS X). Сравните это:

По умолчанию, если вы указываете tar архивировать файл с жесткими ссылками, и среди архивируемых файлов включается более одной такой ссылки, он архивирует файл только один раз и записывает вторую (и любые дополнительные имена) как жесткие ссылки. , Это означает, что при извлечении этого архива жесткие ссылки будут восстановлены.

Обратите внимание, что жесткие ссылки будут восстановлены между восстановленными файлами (то есть они будут имитировать жесткие связи источника), но восстановленные файлы никогда не будут повторно жестко связаны с исходными файлами (или их жесткими ссылками, которые могут все еще существовать), даже если они Извлеченный в ту же файловую систему tar получил их.

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

tar -c /source/dirA/ /source/file1  | { cd /foo/destination/ && tar -x; }

Команда выполняет копирование без удаления. Если вам нужно удалить источник, сделайте это с помощью отдельной команды.

0

Нет, по умолчанию mv не сохраняет жесткие ссылки:

~$ which mv
/bin/mv
~$ uname -a
Darwin mini.local 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64

~$ cd /Volumes/Backup\ primary/
Backup primary$ mkdir test
Backup primary$ cd test/
test$ echo foo > a
test$ ln a b
test$ ls -li a b
14271856 -rw-r--r--  2 user     staff  4 Oct 15 19:23 a
14271856 -rw-r--r--  2 user     staff  4 Oct 15 19:23 b
test$ cd ..
Backup primary$ mv test ../Backup\ secondary/
Backup primary$ ls -li ../Backup\ secondary/test/
total 32
11040478 -rw-r--r--  1 user     staff  4 Oct 15 19:23 a
11040479 -rw-r--r--  1 user     staff  4 Oct 15 19:23 b

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