Я могу переместить каталог с открытыми файлами?

Простой путь состоит в том, чтобы обойти проблему, состоит в том, чтобы поместить my_folder в переменную оболочки и удалить ведущую наклонную черту с него:

tar -cf - ${my_folder##/} | gzip --rsyncable > my_file.tar.gz

Иначе можно проверить $ {PIPESTATUS [0]} в блоке и использовать ложь, если это не нуль для передачи сигналов об ошибке внешнему процессу:

{ tar -cf - my_folder 2>&1 1>&3 | 
    grep -v "Removing leading" 1>&2; 
    [ ${PIPESTATUS[0]} -eq 0 ] && true || false; } 3>&1 | 
    gzip --rsyncable > my_file.tar.gz
6
16.01.2012, 21:50
2 ответа

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

  • Вы не перемещаете каталог через файловые системы. Это изменило бы inode числа файлов, конечно.
  • Процессы на самом деле сохраняют файлы открытыми, и не закрывают их при случае (если так, необходимо будет реконфигурировать приложения для создания их знающий о новом родительском каталоге),
  • Вы используете ext2/3/4 или одну из различных версий ufs там. Я не могу честно говорить о другом fileystems, потому что я не уверен, как они организованы внутренне.
6
27.01.2020, 20:27
  • 1
    Это верно для любой файловой системы и для любого варианта Unix (за исключением исполняемых файлов на некоторых вариантах Unix). Открытый файл связывается с inode, не с названием файла, и не имеет значения, если файл переименован или даже удален. –  Gilles 'SO- stop being evil' 16.01.2012, 21:50
  • 2
    Это правда в ядре, но из ядра, структуры и операции файловой системы безраздельно властвуют. И Linux может говорить с целым сыщиком странных файловых систем. Мне просто не нравится делать обобщения — я видел слишком много странных вещей для этого. Там мог, очевидно, существовать экзотическая файловая система, которая (по неизвестным причинам) создает новый inodes, когда файл перемещен через каталоги. Возможно, потому что inode парадигма не отображается чисто на ту файловую систему. Всегда существуют степени свободы, таким образом, я должен говорить о том, в чем я уверен. –  Alexios 23.01.2012, 23:01

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

Да, можно переместиться / удаляют любой каталог или файл, который используется любым процессом в любое время. Heck, можно удалить исполняемый файл процесса, в то время как он работает, и он продолжит работать.

Однако подготовьтесь к некоторым возможным сценариям:

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

Файлы будут физически очищены на, удаляют, когда никакой процесс не будет использовать их дескрипторы. Вы будете видеть файлы, перемещенные / удаленный сразу.

1
27.01.2020, 20:27

Теги

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