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
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
MOUNTPOINT
列を確認してください。何にもマウントポイントがないようです。データセットにマウントポイントを設定してみてください。
たとえば、これはzroot/ROOT
を/mnt/zfs/ROOT
にマウントすると思います。
zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT
ZFSについては、なぜこれが自動的に行われないのか、またはLinuxシステムにインポートするときに必要なのかどうかについては、よくわかりません。