BTRFS: сбой системного вызова mount(2): Файл существует

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Закрыто
Аватара пользователя

Автор темы
Dja
Сообщения: 7069
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 734 раза
Контактная информация:

BTRFS: сбой системного вызова mount(2): Файл существует

#1

29 май 2024, 08:23

Приветы!
Накануне скопировал dd раздел в файл. Всё успешно. На ночь оставлял. Теперь не могу этот файл примонтировать. А вот соседний файл монтируется.
2024-05-29_09-35.png
А вот на другом ПК тот что не смог на первом смонтировался без проблем. Почему на первом не могу? :hm:
2024-05-29_09-24.png
В обоих случаях BTRFS
Вот еще что увидел
[мая29 09:46] loop0: detected capacity change from 0 to 1953521664
[  +0,003300] BTRFS warning: duplicate device /dev/loop0 devid 1 generation 396 scanned by mount (6851)

Решение slant » 29 май 2024, 20:06
НИКОГДА не пробуй монтировать BTRFS если имеется две копии одного раздела (вот как после dd). Так до потери данных можно доиграться или не грузящейся системы. Копию делать можно, но:
1. Только offline. (в отличии от всех обычных операций над btrfs которые проводятся online.)
2. Перед попыткой монтирования - убедится что доступной ядру остается только одна копия. (Вторую нужно убрать заранее. Если это полученный от dd файл - ядро его не видит без losetup и оригинал остается рабочим, но монтировать этот файл его через loop нельзя пока оригинал доступен на исходном устройстве.)

А штатный метод копирования/переноса на другой носитель - команды btrfs send / btrfs receive. Применяются к субтомам. Т.к. работают с стандартными потоками unix то через перенаправления позволяют скопировать их и в файл, как с dd. Работают с online разделом, а потому чтобы применить send нужно сначала создать RO снапшот (с соответствующим ключом) и уже этот снапшот отправлять куда-то через send. (rw субтом просто не даст отправить - ругаться будет.)
При receive создается тоже содается RO сабтом, с которого потом делается RW снапшот. После этого RO сабтом можно убить. Такие "двухступенчатые" операции гарантируют неизменность содержимого в процессе копирования и отсутствие конфликтов доступа.

Если же нужно просто заменить диск (физический) - там еще проще. btrfs dev add новый диск (расширяем FS на второй диск, если просто так и оставить -это не raid а JBOD получится, для raid еще balance нужно сделать), и потом btrfs dev remove старый. В процессе remove данные будут перенесены (лишь бы места хватало на добавленном диске). В этом случае даже не потребуется никаких конфигов обновлять (все завязано на UUID которые в этом случае правильно изменятся), разве что сам загрузчик переустановить, если он находится на удаляемом диске.

Еще - из чата:
Dja писал(а): Если снапшоты - всего лишь изменения, то где сами файлы? К примеру. Сделал снап. Создал папку. Восстановился на снап. Куда деётся папка? Ведь если после того как сделал папку сделать еще один снап, то можно прыгать с одного снапа на другой и папка то будет то нет... Куда деваются файлы?
Здесь аналогия с библиотекой - есть книга на полке (блок тела файла), и есть ее карточка в картотеке (метаданные). У одной книги может быть несколько карточек - просто в разных разделах картотеки для облегчения поиска если книга удовлетворяет разным тематическим каталогам. Это состояние на момент снятия снапшота.
Далее представим себе, что в библиотеке у нас не просто книги, а рабочие журналы (ученых) например. И вот ситуация. Пришел новый ученый, прочитал старый журнал, и нашел ошибку в одном месте. Но сам не уверен на 100%, и просто хочет записать свой вариант опыта не теряя оригинал. Он берет чистый лист, пишет свой вариант. Кладет лист рядом с журналом, а в картотеке отмечает: "Мой журнал - это журнал Х но вместо страницы Y читать с листа который лежит рядом."
Т.е. он не переписывал весь журнал, а только тот лист, где его собственные изменения. А вот в картотеке теперь две записи - о старом и новом варианте.

Как-то так это выглядит. Разумеется у btrfs еще есть механизмы которые контролируют версионность и неизменность "слепка" на котором основано очередное изменение. Но прикол в том, что это обычный механизм COW - который работает практически постоянно. :)
Ну, и надо помнить, что у btrfs все это привязано не к файлу а к блоку. Т.е. если 100MB файле поменялось пара байт в другом снапшоте - для сохранения этих изменений не будет создана полная копия всего файла, а только дополнительно один блок (4 или 16kb обычно).

Ну и отвечая непосредственно на на вопрос из цитаты - когда ты восстановился на snap - ты переключился в другую версию состояния каталогов - папка осталась на том снапшоте на котором ты ее создавал. Если же удалены все снапшоты/сабтома где она есть - блоки относящиеся к ней становятся свободными и доступны для повторного использования.

В общем-то это не только btrfs касается. И на других unix FS есть такая штука как hardlinks - хардлинки, альтернативные имена файла, которые могут находится в любом месте того же раздела/диска. (Тот самый пример с картотекой, только здесь тело файла всегда одно для всех его имен, без разных версий). Так вот - удаленным файлом в unix считается тот, у которого нет ни одного имени в метаданных FS.
Hardlink может быть только у файла - но не у каталога. (В отличии от softlink'a, который к тому же может и на другое устройство вести.)

Перейти к ответу ➙

Аватара пользователя

Автор темы
Dja
Сообщения: 7069
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 734 раза
Контактная информация:

сбой системного вызова mount(2): Файл существует

#2

29 май 2024, 09:56

2024-05-29_09-55.png
Немного прояснилось

Аватара пользователя

slant
Сообщения: 4859
Зарегистрирован: 21 июн 2017, 18:09
Решено: 111
Благодарил (а): 53 раза
Поблагодарили: 2177 раз
Контактная информация:

сбой системного вызова mount(2): Файл существует

#3

29 май 2024, 20:06

НИКОГДА не пробуй монтировать BTRFS если имеется две копии одного раздела (вот как после dd). Так до потери данных можно доиграться или не грузящейся системы. Копию делать можно, но:
1. Только offline. (в отличии от всех обычных операций над btrfs которые проводятся online.)
2. Перед попыткой монтирования - убедится что доступной ядру остается только одна копия. (Вторую нужно убрать заранее. Если это полученный от dd файл - ядро его не видит без losetup и оригинал остается рабочим, но монтировать этот файл его через loop нельзя пока оригинал доступен на исходном устройстве.)

А штатный метод копирования/переноса на другой носитель - команды btrfs send / btrfs receive. Применяются к субтомам. Т.к. работают с стандартными потоками unix то через перенаправления позволяют скопировать их и в файл, как с dd. Работают с online разделом, а потому чтобы применить send нужно сначала создать RO снапшот (с соответствующим ключом) и уже этот снапшот отправлять куда-то через send. (rw субтом просто не даст отправить - ругаться будет.)
При receive создается тоже содается RO сабтом, с которого потом делается RW снапшот. После этого RO сабтом можно убить. Такие "двухступенчатые" операции гарантируют неизменность содержимого в процессе копирования и отсутствие конфликтов доступа.

Если же нужно просто заменить диск (физический) - там еще проще. btrfs dev add новый диск (расширяем FS на второй диск, если просто так и оставить -это не raid а JBOD получится, для raid еще balance нужно сделать), и потом btrfs dev remove старый. В процессе remove данные будут перенесены (лишь бы места хватало на добавленном диске). В этом случае даже не потребуется никаких конфигов обновлять (все завязано на UUID которые в этом случае правильно изменятся), разве что сам загрузчик переустановить, если он находится на удаляемом диске.

Еще - из чата:
Dja писал(а): Если снапшоты - всего лишь изменения, то где сами файлы? К примеру. Сделал снап. Создал папку. Восстановился на снап. Куда деётся папка? Ведь если после того как сделал папку сделать еще один снап, то можно прыгать с одного снапа на другой и папка то будет то нет... Куда деваются файлы?
Здесь аналогия с библиотекой - есть книга на полке (блок тела файла), и есть ее карточка в картотеке (метаданные). У одной книги может быть несколько карточек - просто в разных разделах картотеки для облегчения поиска если книга удовлетворяет разным тематическим каталогам. Это состояние на момент снятия снапшота.
Далее представим себе, что в библиотеке у нас не просто книги, а рабочие журналы (ученых) например. И вот ситуация. Пришел новый ученый, прочитал старый журнал, и нашел ошибку в одном месте. Но сам не уверен на 100%, и просто хочет записать свой вариант опыта не теряя оригинал. Он берет чистый лист, пишет свой вариант. Кладет лист рядом с журналом, а в картотеке отмечает: "Мой журнал - это журнал Х но вместо страницы Y читать с листа который лежит рядом."
Т.е. он не переписывал весь журнал, а только тот лист, где его собственные изменения. А вот в картотеке теперь две записи - о старом и новом варианте.

Как-то так это выглядит. Разумеется у btrfs еще есть механизмы которые контролируют версионность и неизменность "слепка" на котором основано очередное изменение. Но прикол в том, что это обычный механизм COW - который работает практически постоянно. :)
Ну, и надо помнить, что у btrfs все это привязано не к файлу а к блоку. Т.е. если 100MB файле поменялось пара байт в другом снапшоте - для сохранения этих изменений не будет создана полная копия всего файла, а только дополнительно один блок (4 или 16kb обычно).

Ну и отвечая непосредственно на на вопрос из цитаты - когда ты восстановился на snap - ты переключился в другую версию состояния каталогов - папка осталась на том снапшоте на котором ты ее создавал. Если же удалены все снапшоты/сабтома где она есть - блоки относящиеся к ней становятся свободными и доступны для повторного использования.

В общем-то это не только btrfs касается. И на других unix FS есть такая штука как hardlinks - хардлинки, альтернативные имена файла, которые могут находится в любом месте того же раздела/диска. (Тот самый пример с картотекой, только здесь тело файла всегда одно для всех его имен, без разных версий). Так вот - удаленным файлом в unix считается тот, у которого нет ни одного имени в метаданных FS.
Hardlink может быть только у файла - но не у каталога. (В отличии от softlink'a, который к тому же может и на другое устройство вести.)

Аватара пользователя

Автор темы
Dja
Сообщения: 7069
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 734 раза
Контактная информация:

сбой системного вызова mount(2): Файл существует

#4

31 май 2024, 08:17

slant писал(а):
29 май 2024, 20:06
а потому чтобы применить send нужно сначала создать RO снапшот (с соответствующим ключом) и уже этот снапшот отправлять куда-то через send
Но ведь снапшот содержит лишь изменения... Это не будет полной копией раздела
upd... а... вспомнил... карточка :-D
Но это опять же с btrfs на btrfs. А если на приемнике ext4?

Аватара пользователя

rogoznik
Сообщения: 10438
Зарегистрирован: 27 июн 2017, 13:36
Решено: 135
Откуда: Нижний Тагил
Благодарил (а): 792 раза
Поблагодарили: 2051 раз
Контактная информация:

сбой системного вызова mount(2): Файл существует

#5

31 май 2024, 08:58

Dja писал(а):
31 май 2024, 08:17
А если на приемнике ext4?
А как ты себе это представляешь? Ведь ext4 не btrfs, а значит не знает и не умеет
Максимум что могу предположить - это предварительно снашот упаковать в tar
ИзображениеИзображение

Аватара пользователя

Автор темы
Dja
Сообщения: 7069
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 734 раза
Контактная информация:

сбой системного вызова mount(2): Файл существует

#6

31 май 2024, 09:00

rogoznik, ну или просто cp/rsync :hoho:

Аватара пользователя

rogoznik
Сообщения: 10438
Зарегистрирован: 27 июн 2017, 13:36
Решено: 135
Откуда: Нижний Тагил
Благодарил (а): 792 раза
Поблагодарили: 2051 раз
Контактная информация:

сбой системного вызова mount(2): Файл существует

#7

31 май 2024, 09:41

Dja, у btrfs есть утилита send, которая позволяет переносить снапшоты на другой раздел/диск. Но вот как себя будет вести снапшот после cp/sync/tar я хз
ИзображениеИзображение

Аватара пользователя

Автор темы
Dja
Сообщения: 7069
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 734 раза
Контактная информация:

сбой системного вызова mount(2): Файл существует

#8

31 май 2024, 09:44

rogoznik, я не про снап. :) а про данные :) снапы это хорошо и удобно, но иногда надо иметь и иметь доступ к копии файлов
Снап удобен тем, что можно пробовать что хочешь, а потом откатываться. А я про другое

Аватара пользователя

rogoznik
Сообщения: 10438
Зарегистрирован: 27 июн 2017, 13:36
Решено: 135
Откуда: Нижний Тагил
Благодарил (а): 792 раза
Поблагодарили: 2051 раз
Контактная информация:

сбой системного вызова mount(2): Файл существует

#9

31 май 2024, 10:41

Dja, в этом случае делать копию данных cp/sync/tar/Clonezilla
ИзображениеИзображение

Аватара пользователя

slant
Сообщения: 4859
Зарегистрирован: 21 июн 2017, 18:09
Решено: 111
Благодарил (а): 53 раза
Поблагодарили: 2177 раз
Контактная информация:

сбой системного вызова mount(2): Файл существует

#10

31 май 2024, 16:20

С Clonezilla те же ограничения что и dd. Она тоже образ раздела снимает.
А так - да, если нужна именно копия данных - tar/rsync в зубы и вперед (cp не так эффективен на больших объемах).
Dja писал(а):
31 май 2024, 08:17
Но ведь снапшот содержит лишь изменения... Это не будет полной копией раздела
upd... а... вспомнил... карточка
Тут, для именно практического использования проще запомнить по другой аналогии: концепция параллельных миров из фантастики. Был один мир до определенного момента - потом разделился на два. И стало два независимых мира - в каждом своя жизнь продолжается независимо. Хотя в момент после разделения они были похожи как две капли, через 1000 лет может быть уже ничего общего между ними.

Карточки и т.д. - это теория о подноготной процессов, чтобы было понятно как место экономится и где подводные камни (почему снап != бекап). А на практике, для пользователя - снапшот это именно полная копия на момент его создания. Пока устройство цело - все команды btrfs тоже именно так и будут себя вести.

Закрыто

Вернуться в «Иные системные ошибки»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей