Коротко — причина почти всегда в том, что неправильно выбран субволюм или «не та» партиция в fstab (или субволюм был создан вложенным и его путь отличается). Btrfs при неудачном subvol-монтировании просто монтирует «по-умолчанию» (или верхний уровень), поэтому вы видите субволюм @ в неожиданном каталоге.
Что проверить и как исправить
1. Посмотреть, какие субволюмы действительно есть на файловой системе
- Смонтируйте раздел (без указания subvol) или зайдите в систему, где он уже доступен, и выполните:
btrfs subvolume list -a /mnt
btrfs filesystem show /dev/sdb4
Эти команды покажут список субволюмов и их пути. Обратите внимание на путь: он может быть, например, "@/@var" (т. е. вы создали @var внутри @), а не просто "@var" на верхнем уровне.
2. Проверить, что в fstab используется та же партиция и тот же subvol
- Узнайте UUID партиции:
blkid /dev/sdb4
- Откройте /etc/fstab и убедитесь, что строка для /var указывает UUID (а не /dev/sdb4) и правильный subvol:
UUID=ВАШ_UUID /var btrfs defaults,noatime,compress=lzo,space_cache=v2,ssd,subvol=@var 0 0
Если в выводе btrfs subvolume list путь был "@/@var", то в fstab нужно указать subvol=@/@var.
3. Исправить (или пересоздать) субволюм, если он создан вложенным
- Вариант 1 — поменять строку в fstab на subvol=@/@var (если субволюм реально лежит под "@"):
UUID=... /var btrfs ... ,subvol=@/@var 0 0
- Вариант 2 — переместить субволюм на верхний уровень (удобнее):
# смонтируйте FS в /mnt (без subvol)
btrfs subvolume snapshot /mnt/@/@var /mnt/@var
btrfs subvolume delete /mnt/@/@var (если не нужен старый)
Тогда в fstab можно оставить subvol=@var.
4. Тест после правок
- Примените монтирование:
mount -a
или перезагрузитесь.
- Убедитесь через mount или findmnt, что /var смонтирован нужным субволюмом:
findmnt -no SOURCE,TARGET,OPTIONS -t btrfs
5. Обратите внимание на порядок монтирования
- /var монтируется раньше многих сервисов, поэтому в fstab желательно указывать правильные опции и использовать UUID. Если нужны системд-зависимости, можно добавить x-systemd.requires=… или другие опции, но обычно это не требуется.
Итого: посмотрите список субволюмов (btrfs subvolume list), убедитесь, что указали правильный путь subvol в fstab (и используете UUID, а не /dev/sdX). Частая ошибка — создать @var внутри @, тогда нужно либо указать subvol=@/@var, либо переместить @var на верхний уровень.