Вопрос или проблема
Когда я пытался создать снимок:
[root@localhost ~]# btrfs subvolume snapshot /home/admin2/ /.snapshots/s2
ОШИБКА: Не является подтомом Btrfs: Неверный аргумент
Как создать снимок BTRFS для каталога?
Снимки можно делать только для подтомов. Прямого способа преобразовать каталог в подтом не существует.
Но если вам просто нужна копия каталога, использующая те же данные на диске, вы можете обратиться к вики BTRFS и использовать cp --reflink
:
cp -ax --reflink=always src/. dest
Это создаст обычную копию вашего каталога, но вместо того чтобы копировать все данные файлов, они будут разделены (=ссылаются) с оригинальным каталогом. По сути, это то же самое, что и снимок, и если вы хотите иметь копию в отдельном подтоме, вы можете просто создать пустой подтом и скопировать в него каталог.
В зависимости от ваших данных это может быть быстрее, чем @ответ Камиля, потому что удаление всех других файлов может занять время при большом количестве файлов.
Я не знаю простого способа. Я бы сказал, что нет, это невозможно сделать напрямую.
Если admin2/
был бы подтомом, тогда не было бы проблемы. Но я не думаю, что вы можете прозрачно и мгновенно преобразовать каталог в подтом.
Есть обходной путь:
-
Создайте снимок всего подтома, который содержит
admin2/
. -
Удалите всё, кроме
admin2/
* из снимка. -
Переместите данные в снимке:
- переместите содержимое
admin2/
* в корневой каталог снимка; - удалите остатки (например, каталог
admin2/
*, теперь пустой) из снимка.
- переместите содержимое
-
Измените владельца и режим корневого каталога снимка в соответствии с оригинальным каталогом
admin2/
.
Таким образом, вы вручную создаете подтом, который вам нужен: снимок каталога.
Если вы думаете, что захотите повторить этот процесс в будущем, тогда подумайте о том, чтобы заменить оригинальный каталог на подтом. Переместите каталог в другое место (переименуйте или удалите его), а затем переместите подтом на его место. Обратите внимание, что подтом становится /home/admin2/
, поэтому вам, скорее всего, захочется создать еще один снимок. Но теперь создание снимка легко, команда, которую вы пробовали, теперь должна работать.
* Не путайте admin2/
в снимке с оригинальным каталогом. Где я обозначаю admin2/
звездочкой, я имею в виду admin2/
в снимке.
Мета заметка: Честно говоря, я почти дублировал этот другой ответ. Вопрос там касается преобразования каталога в подтом, что вы можете или не захотеть сделать. Из-за этого единственного различия я не просто перенаправил вас к другому ответу; я решил объяснить эту процедуру в контексте вашего вопроса. Но различие в основном заключается в вопросе. Единственное различие в процедуре заключается в том, изменяете ли вы в конечном итоге несколько названий или нет. Если вы считаете, что мой ответ полезен, подумайте о том, чтобы голосовать за связанный ответ.
На самом деле, я думаю, что это легко:
- Временно переименуйте ваш каталог (чтобы позволить btrfs создать подтом по этому пути):
mv /home/admin2 /home/admin2-tmp
- Теперь создайте подтом:
btrfs subvolume create /home/admin2
- Переместите содержимое временного каталога обратно в оригинальное место:
mv /home/admin2-tmp /home/admin2
(в качестве альтернативы, вы можете использовать cp reflink для ускорения –cp -ax --reflink=always /home/admin2-tmp/. /home/admin2
, как предложил @acran) - Теперь вы можете создавать снимки, как вам угодно:
btrfs subvolume snapshot /home/admin2/ /.snapshots/s2
Ответ или решение
Можно ли создать снимок BTRFS для директории?
Ни для кого не секрет, что BTRFS (B-Tree File System) предоставляет более продвинутые функции управления данными по сравнению с традиционными файловыми системами. Одной из наиболее ценных функций является возможность создания снимков (snapshot). Однако многие пользователи сталкиваются с вопросом: возможно ли создать снимок для обычной директории, а не для подтома (subvolume)? Ниже мы рассмотрим все аспекты этой темы.
Уточнение термина "снимок"
Снимок в BTRFS — это состояние подтома на определённый момент времени, что позволяет быстро вернуться к этому состоянию в будущем. Однако создание снимков возможно только для подтомов, что означает, что директория, которую вы пытаетесь зафиксировать, должна быть преобразована в подтом.
Ошибка при попытке создать снимок
При выполнении команды:
btrfs subvolume snapshot /home/admin2/ /.snapshots/s2
вы натолкнётесь на ошибку:
ERROR: Not a Btrfs subvolume: Invalid argument
Это указывает на то, что указанная директория не является подтомом, и, следовательно, её невозможно использовать для создания снимка.
Решение проблемы
Если вы хотите создать снимок для директории, вам нужно выполнить несколько шагов для преобразования директории в подтом:
-
Переименовать текущую директорию. Это необходимо для освобождения имени пути, чтобы BTRFS мог создать подтом:
mv /home/admin2 /home/admin2-tmp
-
Создать подтом. Используйте команду для создания подтома в нужной директории:
btrfs subvolume create /home/admin2
-
Вернуть содержимое обратно. Теперь переместите содержимое временной директории в только что созданный подтом:
mv /home/admin2-tmp/* /home/admin2/
Совет: Для ускорения операции вы можете использовать команду с параметром
--reflink
:cp -ax --reflink=always /home/admin2-tmp/. /home/admin2
-
Создание снимка. После выполнения вышеописанных шагов у вас уже есть подтом, и вы можете созидать снимки, используя:
btrfs subvolume snapshot /home/admin2/ /.snapshots/s2
Важно помнить
- Снимки занимают незначительное количество пространства, так как они используют механизмы обмена данных на диске, что делает их лёгкими и эффективными.
- Если вы будете часто создавать снимки для этой директории, рассмотрите возможность использования подтома как основной структуры данных.
Заключение
Создание снимка для директории в BTRFS требует предварительной подготовки, чтобы сначала преобразовать её в подтом. После этого процесс создания снимка становится простым и непринужденным. Это решение обеспечивает гибкость в управлении данными, а также позволяет эффективно использовать возможности файловой системы BTRFS. Если у вас есть дополнительные вопросы или вы хотите узнать больше о работе с BTRFS, пожалуйста, не стесняйтесь обращаться за помощью.