Чому "cp -R --reflink = завжди" виконує стандартну копію у файловій системі btrfs?


12

Btrfs підтримують Copy-On-Write. Я намагався використовувати цю функцію для клонування каталогу:

cp -R --reflink=always foo_directory foo_directory.mirror

Я очікував, що команда закінчиться майже миттєво (як-от a btrfs subvolume snapshot), але cpкоманда, здається, виконує повільну, стандартну копію.

Згідно з довідковою сторінкою, я б очікував --reflink=alwaysзастосувати Copy-On-Write:

Коли вказано --reflink [= завжди], виконайте легку копію, де блоки даних копіюються лише при зміні. Якщо цього неможливо, копія не вдається, або якщо вказано --reflink = auto, поверніться до стандартної копії.

Запитання:

  • Чи знаєте ви, чому --reflink=alwaysне працює?
  • Які параметри (або інші команди) слід використовувати замість цього?

Відповіді:


20

cp --reflink=alwaysмайже напевно працює коректно. Якби не, ви отримаєте помилку. У дизайні це різниця між --reflink=alwaysі --reflink=auto. Помилка виглядатиме так:

# Filesystem that does not support the feature at all
cp: failed to clone `xx' from `yy': Inappropriate ioctl for device

# Filesystem that does support it, but copy across filesystems
cp: failed to clone `xx' from `yy': Invalid cross-device link

Ви копіюєте структуру каталогу з великою кількістю невеликих файлів? У цьому випадку cpвсе-таки доводиться створювати кожен каталог і відкривати та закривати кожен файл, тому це все одно займе час, на відміну від цього btrfs subvolume snapshot. Це, швидше за все, пояснює час, необхідний для проведення операції.


3
Так, він містить величезну кількість файлів, більшість з яких є невеликими текстовими файлами. Я не знав, що cp все одно повинен обробляти кожен файл. Дякую, це була та частина, яку я не зрозумів. Я думаю, що в моєму випадку краще створити знімок, що можна записати.
Філіп Класен

1
Так, якщо ви можете створити знімок, тоді займіться цим. cp --reflink=alwaysвсе ще може стати в нагоді, коли те, що ви намагаєтесь клонувати, - це не корінь підтомника, оскільки btrfs subvolume snapshotпрацює лише на підтомниках, а не на частинах підпунктів.
Селада
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.