Какой из наиболее подходящих для `cp` на` rsync -a`?

Правила для действий add выполняются во время запуска системы, если устройство присутствует. Это делается путем выполнения udevadm info --action=add на системе SysVinit, и внутренне на системе Upstart или Systemd. Однако это происходит очень рано в процессе загрузки, в то время, когда корневая файловая система все еще монтируется только для чтения, а файловые системы из /etc/fstab еще не смонтированы. Я не уверен, что /run уже доступен в этот момент. Это может быть слишком рано для того, что нужно сделать вашему сценарию.

Быстрый и грязный, но портативный способ запустить ваш скрипт во время запуска - запустить его из /etc/rc.local, при условии, что устройство присутствует.

if [ -e /dev/disk/by-id/… ]; then
  /var/scripts/my-script.sh
fi

Обратите внимание, что если устройство будет вставлено во время запуска, возможно возникновение состояния гонки: скрипт будет выполнен, как только устройство будет обнаружено, а затем снова из /etc/rc.local.

Более чистым решением было бы определить блок systemd и объявить зависимости, которые вам нужны, в вашем сценарии. Вам все равно нужно остерегаться потенциального состояния гонки.

1
15.05.2018, 15:37
1 ответ

Обратите внимание, что rsync -aтакже не сохраняет ACL, расширенные атрибуты, жесткие ссылки (, как уже отмечалось ), разреженность.

С GNU cpпо крайней мере

cp -a

Сохраняет все, что делает больше, чем rsync. Более близким эквивалентом rsync будет

rsync -aAHX

Я не думаю, что rsync может воспроизвести разреженность, но вы можете использовать --sparse, чтобы последовательности NUL (, независимо от того, выделены они или дыры ), превращались в дыры в месте назначения.

Обратите внимание, что (не -стандартная)-aопция cpподразумевает -r.-l(еще один нестандартный -вариант ), при условии, что GNU cpне делает то, что вам нужно. Он делает жесткие ссылки вместо копирования файлов.

5
27.01.2020, 23:23

Теги

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