web-dev-qa-db-ja.com

ZFSプールが正しくマウントされていません。すべてのファイルを見つけることができない

FreeBSD 11.0サーバーからUbuntu 16.04.2 LTSサーバーに転送した2つのディスクにZFSプール(ミラーRAID)があります。

プールをインポートすると、次のようになります。

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

私が見ることを期待しているのは、Ubuntuシステムの/mnt/zfsの下に993GiBのファイルを含む完全に設定されたディレクトリツリーです。私が代わりに見ているのは、中にファイルがない、部分的に移入されたディレクトリのツリーです:

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

私はここで基本的な何かを見逃していると確信しています。

Attempt#1: @Zoredacheの提案に従ってROOTのマウントポイントを設定すると、ROOTディレクトリが空になります。

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

Attempt#2: @ user121391の提案に従ってROOT/defaultのマウントポイントを設定すると、空のディレクトリも生成されます。

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

0 directories, 0 files

Attempt#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:

MichaelKjörlingの詳細情報:

$ 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
5
Duncan Bayne

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を実行できる可能性がありますが、チェックしていません)。

noneのマウントポイントが必要な唯一のzfsファイルシステムは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
4
nickcrabtree

MOUNTPOINT列を確認してください。何にもマウントポイントがないようです。データセットにマウントポイントを設定してみてください。

たとえば、これはzroot/ROOT/mnt/zfs/ROOTにマウントすると思います。

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

ZFSについては、なぜこれが自動的に行われないのか、またはLinuxシステムにインポートするときに必要なのかどうかについては、よくわかりません。

1
Zoredache