Назад | Перейти на главную страницу

Пул ZFS монтируется неправильно; не могу найти все файлы

У меня есть пул ZFS (зеркальный RAID) на двух дисках, который я перенес с сервера FreeBSD 11.0 на сервер LTS Ubuntu 16.04.2.

После импорта пула я вижу:

NAME                 USED  AVAIL  REFER  MOUNTPOINT
zroot                993G   790G   104K  /mnt/zfs
zroot/ROOT           989G   790G    96K  none
zroot/ROOT/default   989G   790G   989G  none
zroot/tmp            140K   790G   140K  none
zroot/usr           3.37G   790G    96K  none
zroot/usr/home      2.15G   790G  2.15G  none
zroot/usr/ports      640M   790G   640M  none
zroot/usr/src        608M   790G   608M  none
zroot/var           1.66M   790G    96K  none
zroot/var/audit       96K   790G    96K  none
zroot/var/crash       96K   790G    96K  none
zroot/var/log        476K   790G   476K  none
zroot/var/mail       840K   790G   840K  none
zroot/var/tmp         96K   790G    96K  none

Я ожидаю увидеть полностью заполненное дерево каталогов под /mnt/zfs в системе Ubuntu, содержащий 993 ГБ файлов. Вместо этого я вижу частично заполненное дерево каталогов без файлов внутри них:

$ tree /mnt/zfs
/mnt/zfs
├── tmp
├── usr
│   ├── home
│   ├── ports
│   └── src
└── var
    ├── audit
    ├── crash
    ├── log
    ├── mail
    └── tmp

Я почти уверен, что мне здесь не хватает чего-то фундаментального.

Попытка №1: Установка точки монтирования для ROOT в соответствии с предложением @ Zoredache просто приводит к пустому каталогу ROOT:

$ sudo zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT
$ tree /mnt/zfs
/mnt/zfs
└── ROOT

Попытка №2: Установка точки монтирования для ROOT / default, согласно предложению @ user121391, также дает пустой каталог:

$ sudo zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT/default
$ tree /mnt/zfs
/mnt/zfs

0 directories, 0 files

Попытка №3: Установка отдельного каталога, похоже, работает, согласно другому предложению @ user131391:

$ sudo zfs set mountpoint=/mnt/zfs/usr/home zroot/usr/home
$ tree /mnt/zfs
/mnt/zfs
└── usr
    └── home
        └── duncan
            ├── tmp
            │   ├── code
...
            └── usb

17978 directories, 67539 files

Это здорово, но, к сожалению, это не помогает. Файлы, которые мне нужны, находятся под /usr/local/, который не появляется в результате zfs list. Но пространство явно используется, если посмотреть на размеры:

zroot/ROOT/default   989G   790G   989G  none
zroot/usr           3.37G   790G    96K  none

Попытка №4:

Дополнительная информация для Михаэля Кьёрлинга:

$ sudo zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT/default
$ sudo zfs get mountpoint,mounted zroot -t filesystem -r
NAME                PROPERTY    VALUE          SOURCE
zroot               mountpoint  none           local
zroot               mounted     no             -
zroot/ROOT          mountpoint  none           local
zroot/ROOT          mounted     no             -
zroot/ROOT/default  mountpoint  /mnt/zfs/ROOT  local
zroot/ROOT/default  mounted     no             -
zroot/tmp           mountpoint  none           local
zroot/tmp           mounted     no             -
zroot/usr           mountpoint  none           local
zroot/usr           mounted     no             -
zroot/usr/home      mountpoint  none           local
zroot/usr/home      mounted     no             -
zroot/usr/ports     mountpoint  none           local
zroot/usr/ports     mounted     no             -
zroot/usr/src       mountpoint  none           local
zroot/usr/src       mounted     no             -
zroot/var           mountpoint  none           local
zroot/var           mounted     no             -
zroot/var/audit     mountpoint  none           local
zroot/var/audit     mounted     no             -
zroot/var/crash     mountpoint  none           local
zroot/var/crash     mounted     no             -
zroot/var/log       mountpoint  none           local
zroot/var/log       mounted     no             -
zroot/var/mail      mountpoint  none           local
zroot/var/mail      mounted     no             -
zroot/var/tmp       mountpoint  none           local
zroot/var/tmp       mounted     no             -
$ tree /mnt/zfs
/mnt/zfs

0 directories, 0 files

zroot и zroot / ROOT не содержат файлов, они просто контейнеры для других данных.

Основная часть ваших данных находится в zroot / ROOT / default.

Другие файловые системы zfs должны наследовать свою точку монтирования от zroot (не знаю, как эта информация потерялась при переходе с FreeBSD на Ubuntu):

zfs inherit mountpoint zroot/tmp
zfs inherit mountpoint zroot/usr
zfs inherit mountpoint zroot/usr/home
zfs inherit mountpoint zroot/usr/ports

... и так далее (возможно, это можно сделать с помощью -r, но я не проверял).

Единственная файловая система zfs, которая должна иметь точку монтирования none это zroot / ROOT:

zfs set mountpoint=none zroot/ROOT

После всего этого вам нужно будет экспортировать и повторно импортировать пул, а также смонтировать файловые системы в правильном порядке:

zpool export zroot

Импортируйте пул в новую точку монтирования, но на самом деле ничего не монтируйте:

zpool import -a -N -r /mnt/zfs

Смонтируйте корневой пул:

zfs mount zroot/ROOT/default

Смонтируйте все остальное:

zfs mount -a

Проверить MOUNTPOINT столбец. Похоже, точек монтирования ни для чего нет. Вы можете попробовать установить точки монтирования для своих наборов данных.

Например, я считаю, что это будет zroot/ROOT к /mnt/zfs/ROOT.

zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT

Я недостаточно знаю о ZFS, чтобы сказать вам, почему это не произойдет автоматически или должно произойти при импорте в систему Linux.