HOME / コンピュータTips / Solaris / zfs / zfsboot / マニュアルセットアップ

Date: 2017/09/22 |  このエントリーをはてなブックマークに追加  |  Tags: zfsboot zfs boot manual setup x86 Solaris opensolaris Nevada ZFSブート

zfsブートの手動セットアップ(x86環境用)
Manual Setup to boot ZFS on x86 (a script version is here).

注意:現時点で、古いmountroot setupで構築したzfs rootで動いているのなら、ここに記載された方法で、自分自身の手でnew bitを設定すること。~Note: If your system is running on a zfs root based on the old mountroot setup, you may manually transition to the new bits by following this.

訳注:このページは、下記のページをかなりてきとうに意訳したものです。

  • http://www.opensolaris.org/os/community/zfs/boot/zfsboot-manual/

1. Nevada 62(snv_62)以降のOSであることを確認
ZFS Boot bits is available in snv_62.

Nevada 62(snv_62)以降のOSであることを確認すること。

2. rootpoolの準備

ZFSのpoolとしてrootpoolを準備する。Prepare the disk for a ZFS rootpool.

ブート用のrootpoolは、ディスクデバイス全体か、そのスライス、mirrorボリュームしか設定してはいけない。ディスク全体をrootpoolにしたい場合は、スライスを作成し、SMIラベルを付けなくてはならない(例:c0d0s0) A rootpool can be a single disk device, or a device slice, or in a mirrored configuration. If you use a whole disk for a rootpool, you must use a slice notation (e.g. c0d0s0) so that it is labeled with an SMI label.

注:つまりEFI型やc0d0全体をrootpoolにしてはいけないということ。

3. rootpoolの作成

ZFS boot用のZPOOLを作成し、さらにroot用にzfsを作成する。このファイルシステムはmountpointをlegacyとし、/zfsbootディレクトリにマウントする。再起動の時にマウントできるように、/etc/vfstabも変更しておくこと。Create a ZFS rootpool, a root filesystem, mount the root filesystem on /zfsroot, and update /etc/vfstab to mount /zfsroot upon reboot.

下記は実際の入力例である。この例では、ZFS boot用のZPOOLとしてデバイスc0d0s3にrootpoolを作成し、rootボリュームにzfsでrootpool/rootfsを作成した。mountpointをlegacyとし、/zfsbootディレクトリにマウントを行っている。なお、rootpool/rootfsは、デフォルトのファイルシステム名である。Through out the Instruction examples, we use 'rootpool' for the pool name created on 'c0d0s3', and 'rootpool/rootfs' as the ZFS default boot filesystem name.

zpool create rootpool c0d0s3
zfs create rootpool/rootfs
zfs set mountpoint=legacy rootpool/rootfs
mkdir /zfsroot
mount -F zfs rootpool/rootfs /zfsroot

/etc/vfstabに下記のエントリを追加すること。add this entry in /etc/vfstab:

rootpool/rootfs - /zfsroot zfs - yes -

4. UFS ROOTファイルシステム上のデータをZFS ROOTファイルシステム上に移植する
Populate the UFS root content to the ZFS root filesystem:

UFS rootファイルシステム上のファイルのすべてを、新しく作ったZFS rootファイルシステム上にコピーする。Copy all of the files in the UFS root filesystem to the newly created ZFS root filesystem.

下記のコマンドではマウントポイントを越えずに、rootファイルシステムにあるファイルだけをコピーできる。このコマンドは30分を越える時間がかかるので、注意すること。The following command does this without crossing mountpoints. This command will take on the order of 30 minutes, give or take.

上記の理由から、もし、/usr,/varなど別のファイルシステムも同じようにコピーしたい場合は、それぞれを同じようにコマンドを入力してコピーを行うこと。Note, this will not cross mountpoints, if /usr, /var, or other filesystems are on other mountpoints, they will need to be copied over following this command.

cd /
find . -xdev -depth -print | cpio -pvdm /zfsroot

自動生成するディレクトリ・ファイルのいくつかは、このコピーではコピーされない。下記のツールを実行して、ディレクトリ・ファイルを作成すること。The directory structure for several auto generated filesystems need to be created. Run this script to create them.

filethisscript.sh;

''実行例'

./thisscript.sh /zfsroot

次に、/devicesファイルシステムをコピーする。/devicesは、devfsの疑似ファイルシステムで、ufs上にマウントされて動作する。Populate the /devices filesystem. /devices is a devfs pseudo filesystems which sits on top of a ufs backing store.

システムブート時、/deviceはマウントされて、以後、基礎として動作する。同じようなものに、/devがある。これらは基礎として動作しているので、下記のようにコピーを行う。&size(5){When a system is booted, /devices is mounted on top of this backing store and hides the underlying ufs backing store. Same to the /dev filesystem. To get at the underlying files, do the following:}

mount -F lofs -o nosub / /mnt
(cd /mnt; tar cvf - devices dev ) | (cd /zfsroot; tar xvf -)
umount /mnt

5. ZFS rootファイルシステムの最終設定
Complete the ZFS root filesystem setup:

ZFSブート後に、既存のUFSルートファイルシステムをマウントさせたい場合は、ufsrootというディレクトリをZFS上に作成しておく。If you would like to have your UFS root filesystem mounted while booted of ZFS, make a directory named "ufsroot" on your ZFS filesystem. This will be used to mount your UFS root filesystem when booted off of ZFS.

mkdir /zfsroot/ufsroot

再起動後に、新しいZFSルートファイルシステムが/としてマウントされ、UFS ルートファイルシステムが、/ufsrootとしてマウントされるように、ZFSルートファイルシステム上のvfstab(/zfsroot/etc/vfstab)を編集する。Swapなどのスライスはそのまま利用するため、そのままにしておく。Edit /zfsroot/etc/vfstab to modify mount entries for your new ZFS root and UFS root. Make sure your UFS root is not mounted on “/”. You should already have a swap slice set aside. The added entries should look similar to the following:

/zfsroot/etc/vfstabに下記の編集を行うこと。

rootpool/rootfs - / zfs - no -
/dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 /ufsroot ufs - yes -

また、このZFSのルートファイルシステム(rootpool/rootfs)が、デフォルトのzfsブートファイルシステムになるように、プール(rootpool)に設定しておく。Set this filesystem to be the default ZFS boot filesystem:

zpool set bootfs=rootpool/rootfs rootpool

起動時のboot_archiveに、zfsのマウント情報を含めるため、/zfsroot/boot/solaris/filelist.ramdiskの中に、etc/zfs/zpool.cacheを追加し、boot_archiveを作成する。Edit /zfsroot/boot/solaris/filelist.ramdisk to include “etc/zfs/zpool.cache”, then update the boot archive for the ZFS root:

(add "etc/zfs/zpool.cache" into filelist.ramdisk)

echo etc/zfs/zpool.cache >> /zfsroot/boot/solaris/filelist.ramdisk
/usr/sbin/bootadm update-archive -R /zfsroot

6. GRUBの設定
Setup GRUB to boot off of the ZFS root filesystem:

GRUBからZFSブートできるように設定する。

/zfsroot/boot/grub/menu.lstを、新しく起動するzfsルートファイルシステムのあるzpool上の所定のディレクトリにコピーする。Copy /zfsroot/boot/grub/menu.lst to your top level filesystem since that is where GRUB will read the menu.lst from:

zpoolのマウントディレクトリが/rootpollだった場合(assuming rootpool is mounted on /rootpool)

mkdir -p /rootpool/boot/grub
cp /zfsroot/boot/grub/menu.lst /rootpool/boot/grub

/rootpool/boot/grub/menu.lstを編集し、ZFS bootさせたいエントリにあるunixプログラムの後ろに-B [ZFSは存在しません]-BOOTFSを追加する。通常、unixプログラムは、kernel行に設定されている。下記の例を参照のこと。Edit /rootpool/boot/grub/menu.lst to include an entry for this ZFS boot filesystem by appending '-B [ZFSは存在しません]-BOOTFS' after the unix program. Your entry should look something like this:

例1:オプションが何もないケース

title Solaris ZFS
kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/boot_archive

例2:unixプログラムにオプションが存在するケース(下記は、シリアルコンソールの例)

title Solaris ZFS
kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS,console=ttya
module$ /platform/i86pc/boot_archive

上記の例は、いずれもrootpoolbootfsプロパティに設定した値、rootpool/rootfsから起動する。This entry boots from the default ZFS boot filesystem 'rootpool/rootfs' defined in the 'bootfs' pool property of the 'rootpool' assuming rootpool is the default boot device.

もし、rootpoolがデフォルトのブートデバイスでない場合、rootコマンドによって、ZFS rootpoolからブートするように設定する必要がある。下記の例では、UFSがスライス0(a)にインストールされ、ZFSがスライス3(d)にインストールされている場合の例である。&size(5){If rootpool is not the default boot device, you can use 'root' command to redirect the boot device to the ZFS rootpool. Your entry could look something like this, assuming the UFS root is on slice 0 (default boot device) and ZFS root is on slice 3 of c0d0:}

例3:ブートのroopoolがc0d0s3にインストールされている場合の設定例。

title Solaris ZFS
root (hd0,0,d)
kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/boot_archive

この例では、ZFSのブートファイルシステムであるrootpool/rootfsの名前は、rootpool上のbootfsプロパティには設定済みであり、rootpool自体はc0d0s3に格納されている。This entry boots from the default ZFS boot filesystem 'rootpool/rootfs' defined in the 'bootfs' pool property of the 'rootpool' on c0d0s3.

rootコマンドは次のようなフォーマットである。

root (hdx,y,z)
xディスク識別番号(disk identifier)
yパーティション番号(partition number)0-3
zスライス番号(slice number)a-h(s0-s7に対応)

The root entry has the following format (hdx,x,x) where the first entry in the tuple is the disk identifier, the second entry is the partition number (0-3), and the third entry is the slice number (a-h), where a is slice 0 and h is slice 7.

grubのrootコマンドは、installgrubコマンドによって指示されていれば、必ずしも必要としない。この方法は7に記載する。The root command is not needed if your boot environment is on the disk slice given to the installgrub command. See step #7 for more information.

1つのzpool上に複数のzfsブート可能なファイルシステムがあった場合、bootfsコマンド(bootfs <pool/fs>)で指定することができる。下記がその例である。&size(5){There can be multiple bootable filesystems in a single pool. You can override the default boot filesystem name by using a GRUB command 'bootfs <pool/fs>'. Put it before the kernel command. Example:}

例3:別のzfsブートファイルシステムとして、rootpool/rootfsを指定した場合

title Solaris ZFS
bootfs rootpool/rootfs2
kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/boot_archive

フェイルセーフモードは次の通りとなる。-B [ZFSは存在しません]-BOOTFSが必要ないことに注意。&size(5){For the failsafe mode, use the following entry in menu.lst:}

kernel /boot/platform/i86pc/kernel/unix
module /boot/x86.miniroot

7. GRUBのインストール
Install the new bootloader.

grubは、installgrub(1M)コマンドで、インストールできる。パラメタとして、stage1,stage2ファイルを指定し、ブート先のローデバイス名を設定する(新しいファイルシステムは/zfsroot/boot/grub/にある)。下記はその例である。The grub bootloader is installed via a utility called installgrub(1M). It takes, as its parameters, a pointer to stage1 and stage2 (available in your newly bfu'd filesystem at /zfsroot/boot/grub/) and the raw device containing a boot environment.Installgrub will install stage1 and stage2 on the boot area of a disk partition. The raw device indicates where the root is. The examples below show how to installgrub on a system which has the ZFS rootpool.

例1:ZFS roopoolがc0d0s3、UFS rootがc0d0s0と、同じインストールされている場合
ZFS rootpool (c0d0s3) and UFS root (c0d0s0) are on the same disk:

installgrub /zfsroot/boot/grub/stage1 /zfsroot/boot/grub/stage2 /dev/rdsk/c0d0s3

このようにインストールし、下記のようなエントリをmenu.lstに記載すると、c0d0s3上のrootpoolから、OSが起動する。Then, the following entry will boot off the default boot filesystem from the rootpool on c0d0s3:

title Solaris Default-ZFS
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/boot_archive

例2:ZFS rootpoolがc1d0s0、UFS rootがc0d0s0と、異なったディスクにインストーされている場合
ZFS rootpool (c1d0s0) and UFS root (c0d0s0) are on a different disk:

installgrub /zfsroot/boot/grub/stage1 /zfsroot/boot/grub/stage2 /dev/rdsk/c1d0s0

この場合、BIOSで起動デバイスをc1d0へと変更する必要がある。その上で、同じディスク上のmenu.lstの起動シーケンスに入る。Change the boot device in BIOS to be c1d0, then the same Default-ZFS menu.lst entry will boot off the default bootfs from the rootpool on c1d0s0:

8.リブート
Reboot.

起動後、ZFS Boot環境にGRUBメニューから選択することを忘れずに。ブートディスクを変えた場合は、その設定も忘れないようにすること。Remember to select your ZFS Boot environment from the GRUB menu or change the boot device in the BIOS.

注意:再起動前にzpool exportは行わないこと!(Note: Do Not export the rootpool before rebooting.)


コンピュータTips/Solaris/zfs/zfsboot

Recent Updates

ディスクの不良を確認する(iostat -EnのError等)

ディスク関係のスタックをざっくり書くと次の様になっています 例、SAS Expanderを使う場合、 例、AHCIなどを使う場合、 これらのエラーは、次の様なコマンドで知ることができます。 出力結果例 このなかで、 たとえば、SATAディスクを利用している際に負荷が上がってしまい、ディスクの応答が間に合わないシチュエーションでは、Transport Errorが一気に …
»続きを読む

2017年、新年明けまして、おめでとうございます。

日記/2017年、新年明けまして、おめでとうございます。

新年明けまして、おめでとうございます。今年もよろしくお願いします。 昨年中は、皆様にお世話になりました。 昨年は、コツコツと3年程前から行ってきた改革がある程度完成された年で、この先5年、10年を見据えて、次のフェーズへと進む為の土台が完成した年でもありました。 それにキャッチアップする形で、個々の従業員一同が、役割を自覚し、明確に動けた年であったかと考えています。 …
»続きを読む

RSA鍵認証のみにし、Password認証を無効化する

意外に覚えきれなくて、いつも忘れるので、メモついでに残しておきます。 古いOpenSSHや、SunSSHの場合は、これも無効にします。 ユーザ目線でのザックリとした説明を。OpenSSHではなく別のSSH実装も含めて考えているので、OpenSSHのソースをじっくり読んだわけではないため、間違ってたらすみません。 まず、Password認証を無効にする場合、 PasswordAut …
»続きを読む

Nexus7 2013をMarshmallow(Android 6.0)化

OTAでない方法で。 だいたい ここに書いてある方法 なんだけど、adbなどが一式使えている状態で。 まずは自分の機種のものをダウンロードする。僕のは、 Android 6.0 Marshmallow for Nexus 7 2013 Wi-Fi 。tgzを展開し、zipも解いておく。 まずはboot loaderへ。 bootloader自体のアップデート。一式、updat …
»続きを読む

OS X 10.11 El Capitanで、phpのモジュールインストール

Yosemiteからのアップデートは割と簡単です。なぜならYosemite時に、すでにapache 2.4になり、php 5.5になっているから(笑 アップデート前に、まずはphp.iniとhttpd.confをバックアップしておきましょう きになるなら、hostsとかapache以下全てをバックアップしておいてもいいかも。 後はEl Capitanにアップデートする。 アッ …
»続きを読む

EasyAcc Powerbank PB4000CB

スマフォTips/モバイルバッテリー/モバイルバッテリー製品レビュー/EasyAcc Powerbank PB4000CB

薄型のモバイルバッテリーEasyAcc Powerbank PB4000CBです。 今や、モバイルバッテリーは大型のものが好まれるのか、隙間無く商品があります。20,000mAh越えで、「でけえ!」とか言ってますけど、大きいのを探せば、100Wh(27,000mAh)、200Wh当たり前、探せば500Wh(135,000mAh)とか、もっともっとあるのです。用途がどんどん異なっていくので …
»続きを読む

EC Technology Sports Headsets S10-JWH07B

デバイスTips/Bluetooth/EC Technology Sports Headsets S10-JWH07B

Bluetoothのスポーツヘッドセット、 S10-JWH07B について。 今までブログに記載することはなかったのですが、実は割とBluetoothと言うか無線型のヘッドフォンを沢山持っています。赤外線や独自物、Bluetoothなどいくつもストックを持っていたりします。普通の人からするとマニアです。でも、マニアからみるとそうでもないレベルです。 ただ「ヘッドフォンの音質」というの …
»続きを読む

静岡県内をVPNでつなぐ(割と特殊な例)

静岡というのはある意味特殊な土地で、ほとんどのインターネットプロバイダのPOIは静岡でつながれておらず、NTT西圏内のどこかで繋がっているので、大抵大阪折り返しになる。仮に静岡県内にPOIがあっても、だいたい静岡でルーティングしてないので、やっぱり東京折り返しになってたりする。例え 同じプロバイダを使っていたとしても 。 だから静岡←→静岡のVPNは、静岡←→東京や、静岡←→大阪よりも遅 …
»続きを読む

最新  |  << 前ページ  |  次ページ >>  |  最初