ZFS

rm -rf bootしてしまった

zfsをつかうと簡単にファイルシステムが作れるため、df を実行すると33行にもなる状態になっている。

そんなわけで df しても最初に出てくる / の容量を目にすることはほとんどなく、空き容量を気にすることがない。

なにかの拍子に久々にdfを見てしまったところ空き容量が負になっていたので、「そうじそうじ」ってことでいつものように/boot/kernel.*のバックアップを消していたところ、気が向いて/boot.*も消そうしたらまちがえて /boot も消してしまった。

「やっちまった」とおもって、ちょっと悩んでから電源ボタン長押しで強制ダウンさせたが悩んだ時間+長押し時間のあいだにflushされてしまったようで、リブートすると boot がみつかりませんと表示されローダーのプロンプトで止まった。

/usr/srcでmake installkernenlすればいいよねってことで、裏パーティションにインストールしてあるWindows XPを起動させ8.0-RELEASE-amd64-livefs.isoのCDを焼いてブートさせてみたのだがzfsのversionが古くてzpool importが失敗する。

教訓: zpool upgradeやzfs upgradeはリリース版より新しいものはつかわないようにすべし。そうでなかったらopensolaris.koとzfs.koのコピーをUSBメモリかなにかにコピーしておくべし。

そんなわけでFreeBSD-9.0-CURRENT-amd64-livefs.isoをとってきて復旧。当然のようになれてないので結構たいへん。

  • fixitでCDのshellを起動する。
  • とにかくzfsをマウントしないことには先に進まない。
    • cd /mnt2/boot/kernel
    • kldload ./opensolaris.ko
    • kldload ./zfs.ko
  • そのまえに / パーティションをマウントして、いくつかスクリプトを実行しておく
    • mkdir /mnt0
    • mount /dev/ad4s2a /mnt0
    • chdoot /mnt0 tcsh
    • cd /etc/rc.d
    • ./hostid start
    • ./hostname start
    • ./zfs start
      • internal error: failed to initialize ZFS library
    • よくわからんが、うまくいってないのはたしか。
    • exit
  • 手動でzfsのマウントをこころみる。
    • zpool import
      • action: The pool can be imported using its name or numeric identifier.
    • どうもプール名は指定しないといけないようだ (-aでもよかったかも)
    • zpool import tank
    • zfs list
      • /lib/exec/ld-elf.so.1: Shared object "libzfs.so.2" not found, required by "zfs"
      • なんじゃそりゃー
      • どうやらzfs mountで/usr/libなどがすべて / 配下にmountされたため不整合をおこしているようだ。
  • だめもとで、いちどfixitを終わって、もういちどfixitを起動したらみえた。
  • いちどzfsはunmountして/mntzにマウントしなおすとといいのではないかとおもった。
    • zfs umount -a
    • mkdir /mntz
    • zpool import -R /mntz tank
      • cannot import 'tank': no such pool available
      • すでにpoolを読み込んでいるのでダメっぽい
    • zpool export tank
    • zpool import -R /mntz tank
      • できた。でもmntzって名前がきもちわるいのでmnt0にする。
    • zfs umount -a
    • zpool export tank
    • mkdir /mnt0
    • zpool import -R /mnt0 tank
    • chroot /mnt0 tcsh
    • cd /usr/src
    • make installkernel KERNCONF=ほげほげ
  • reboot
    • zfsがちゃんとmountできなくてrc.dのスクリプトがことごとく失敗。
  • 再度reboot後、zpool import tankすると
    • cannot import 'tank': pool may be in use from other system,it was last accessed by hogehoge (hostid: 0x81f4ec68) on Tue May 18 04:59:31 2010
  • zpool import -f tank
    • これでうまくいった。

isoイメージのダウンロード時間とかXPのwindows updateの時間も含めて、結局2時間くらいかかった。

rm -r boot したときすぐにmake installkernelしていれば、こんなに苦労しなくてすんだのに。

あとは nvidial.ko が消えていて X が立た上がらなかったので make reinstall + make deinstall で入れなおし。

virtualbox のモジュールも消えているとおもうが、とうぶんつかうよていはないのでわすれておく。

あとでバックアップとってないかとさがしてみたら、/var/backups/rootfsにコピーが残っていた。

DIR=/var/backups

/usr/local/bin/rsync --one-file-system --archive --hard-links / $DIR/rootfs || exit 1

arc_summary.pl

ここをZFSTuningGuideをみたら FreeBSD用のarc_summary.plがあったのでためしてみた。 L2ARCの統計情報も出てオリジナリより改良されている。
% zpool iostat -v
                capacity     operations    bandwidth
pool          used  avail   read  write   read  write
-----------  -----  -----  -----  -----  -----  -----
tank         1.11T   850G     10     10   213K   254K
  raidz1     1.11T   850G     10      9   213K   144K
    ad6s2        -      -      4      4   164K  72.3K
    ad8s2        -      -      4      4   164K  72.3K
    ad10s2       -      -      4      4   165K  72.3K
  label/zil   236K  1.95G      0      0      0   110K
cache            -      -      -      -      -      -
  ad6s1      9.75G     8M      3      0  33.4K  12.5K
  ad8s1      9.75G     8M      3      0  33.2K  12.5K
  ad10s1     9.75G     8M      4      0  34.0K  12.6K
-----------  -----  -----  -----  -----  -----  -----

% perl arc_summary.pl
------------------------------------------------------------------------
System Summary				Wed Apr 28 14:29:23 2010

FreeBSD 9.0-CURRENT #0 r204350M: Fri Feb 26 19:01:43 JST 2010 root

Kernel Version:					900009 (osreldate)

Hardware Platform:				amd64
Processor Architecture:				amd64

 2:29午後  up 58 days, 23:39, 6 users, load averages: 0.82, 0.84, 0.83
------------------------------------------------------------------------

Physical Memory:				11251.68M
Page Size:					4096

Kernel Memory
TOTAL:						2488.04M
DATA:					99.07%	2464.85M
TEXT:					0.93%	23.19M

ARC Summary
	Storage pool Version:			14 (spa)
	Filesystem Version:			3 (zpl)
	Memory Throttle Count:			2446

ARC Misc:
	Deleted:				49851298
	Recycle Misses:				17938481
	Mutex Misses:				234545
	Evict Skips:				234545

ARC Size:
	Current Size:			94.14%	2454.45M (arcsize)
	Target Size: (Adaptive)		98.21%	2560.57M (c)
	Min Size (Hard Limit):		78.55%	2048.00M (c_min)
	Max Size (High Water):		~1:1	2607.17M (c_max)

ARC Size Breakdown:
	Recently Used Cache Size:	82.46%	2111.44M (p)
	Frequently Used Cache Size:	17.54%	449.13M (c-p)

ARC Hash Breakdown:
	Elements Max:				1276063
	Elements Current:		84.72%	1081143
	Collisions:				46122872
	Chain Max:				17
	Chains:					240406

ARC Efficiency:
	Cache Access Total:			2033371966
	Cache Hit Ratio:		96.35%	1959068722
	Cache Miss Ratio:		3.65%	74303244
	Actual Hit Ratio:		87.79%	1785170987

	Data Demand Efficiency:		98.57%
	Data Prefetch Efficiency:	95.77%

	CACHE HITS BY CACHE LIST:
	  Anonymous:			7.32%	143488724
	  Most Recently Used:		5.96%	116810283 (mru)
	  Most Frequently Used:		85.16%	1668360704 (mfu)
	  Most Recently Used Ghost:	0.34%	6596507 (mru_ghost)
	  Most Frequently Used Ghost:	1.22%	23812504 (mfu_ghost)

	CACHE HITS BY DATA TYPE:
	  Demand Data:			51.93%	1017342771
	  Prefetch Data:		2.02%	39650358
	  Demand Metadata:		34.39%	673805183
	  Prefetch Metadata:		11.65%	228270410

	CACHE MISSES BY DATA TYPE:
	  Demand Data:			19.85%	14746725
	  Prefetch Data:		2.36%	1750669
	  Demand Metadata:		52.98%	39365272
	  Prefetch Metadata:		24.82%	18440578

L2 ARC Summary
	Low Memory Aborts:			151
	Bad Checksums:				1
	IO Errors:				0
	R/W Clashes:				3574
	Free on Write:				167599

L2 ARC Size:
	Current Size: (Adaptive)		61261.95M
	Header Size:			0.27%	168.25M

L2 ARC Evicts:
	Lock Retries:				1366
	Upon Reading:				20

L2 ARC Breakdown:
	Access Total:				34677308
	Hit Ratio:			99.99%	34673734
	Miss Ratio:			0.01%	3574
	Feeds:					4643655

	WRITES:
	  Sent Total:				237077
	  Done Ratio:			100.00%	237077
	  Error Ratio:			0.00%	0

VDEV Cache Summary
	Access Total:				44356757
	Hits Ratio:			60.94%	27029865
	Miss Ratio:			39.06%	17326892
	Delegations:				4677022

ZFS Tunable (sysctl):
	kern.maxusers=384
	vfs.zfs.arc_meta_limit=683454464
	vfs.zfs.arc_meta_used=676470592
	vfs.zfs.mdcomp_disable=0
	vfs.zfs.arc_min=2147483648
	vfs.zfs.arc_max=2733817856
	vfs.zfs.zfetch.array_rd_sz=1048576
	vfs.zfs.zfetch.block_cap=256
	vfs.zfs.zfetch.min_sec_reap=2
	vfs.zfs.zfetch.max_streams=8
	vfs.zfs.prefetch_disable=0
	vfs.zfs.check_hostid=1
	vfs.zfs.recover=0
	vfs.zfs.txg.synctime=5
	vfs.zfs.txg.timeout=30
	vfs.zfs.scrub_limit=10
	vfs.zfs.vdev.cache.bshift=16
	vfs.zfs.vdev.cache.size=10485760
	vfs.zfs.vdev.cache.max=16384
	vfs.zfs.vdev.aggregation_limit=131072
	vfs.zfs.vdev.ramp_rate=2
	vfs.zfs.vdev.time_shift=6
	vfs.zfs.vdev.min_pending=4
	vfs.zfs.vdev.max_pending=35
	vfs.zfs.cache_flush_disable=0
	vfs.zfs.zil_disable=0
	vfs.zfs.version.zpl=3
	vfs.zfs.version.vdev_boot=1
	vfs.zfs.version.spa=14
	vfs.zfs.version.dmu_backup_stream=1
	vfs.zfs.version.dmu_backup_header=2
	vfs.zfs.version.acl=1
	vfs.zfs.debug=0
	vfs.zfs.super_owner=0
	vm.kmem_size=3807559680
	vm.kmem_size_scale=3
	vm.kmem_size_min=0
	vm.kmem_size_max=329853485875
------------------------------------------------------------------------
% 
このL2ARCの組み方はいいのかというツッコミはなしで。 ほんとうはメインメモリが4GBも空いているのでARCにつかってほしんだけどUFSのように動的にチューニングされないから困ったもんだなぁ。 koie

zfs destroy高速化

大量にあるsnapshotをzfs destroyで消すような場合、1つずつzfs destroy tank/foo@barとやるよりも

for X in bar1 bar2 ... ; do zfs destroy tank/foo@$X & done; wait

というようにバックグラウンドで複数実行した方がかなり速く終わる。たぶんまとめて実行することでCoWの量が減らせるんだとおもう。ただ、対象となるスナップショットが大量にある場合にはプロセス数に注意。バッチ的にまとめて消したい場合はこんな感じ:

zfs list -r -t snapshot -o name tank/home/koie | while read X; do ...

zpool upgrade

カーネルも安定して動いているので、FreeBSD ZFSのpool versionを13から14にあげた。
guriandgura# zpool status -v
  pool: tank
 state: ONLINE
status: The pool is formatted using an older on-disk format.  The pool can
	still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
	pool will no longer be accessible on older software versions.
 scrub: none requested
config:

	NAME            STATE     READ WRITE CKSUM
	tank            ONLINE       0     0     0
	  raidz1        ONLINE       0     0     0
	    ad6s2       ONLINE       0     0     0
	    ad8s2       ONLINE       0     0     0
	    ad10s2      ONLINE       0     0     0
	logs            ONLINE       0     0     0
	  label/zil     ONLINE       0     0     0
	cache
	  label/zcache  ONLINE       0     0     0

errors: No known data errors
guriandgura# zpool upgrade -v
This system is currently running ZFS pool version 14.

The following versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit support
For more information on a particular version, including supported releases, see:

http://www.opensolaris.org/os/community/zfs/version/N

Where 'N' is the version number.
guriandgura# zpool get all tank
NAME  PROPERTY       VALUE       SOURCE
tank  size           1.94T       -
tank  used           1.42T       -
tank  available      528G        -
tank  capacity       73%         -
tank  altroot        -           default
tank  health         ONLINE      -
tank  guid           10449242002448667042  -
tank  version        13          local
tank  bootfs         -           default
tank  delegation     on          default
tank  autoreplace    off         default
tank  cachefile      -           default
tank  failmode       wait        default
tank  listsnapshots  off         default
guriandgura# zpool upgrade -a
This system is currently running ZFS pool version 14.

Successfully upgraded 'tank'

guriandgura# zpool get all tank
NAME  PROPERTY       VALUE       SOURCE
tank  size           1.94T       -
tank  used           1.42T       -
tank  available      528G        -
tank  capacity       73%         -
tank  altroot        -           default
tank  health         ONLINE      -
tank  guid           10449242002448667042  -
tank  version        14          default
tank  bootfs         -           default
tank  delegation     on          default
tank  autoreplace    off         default
tank  cachefile      -           default
tank  failmode       wait        default
tank  listsnapshots  off         default
guriandgura# zpool status -v
  pool: tank
 state: ONLINE
 scrub: none requested
config:

	NAME            STATE     READ WRITE CKSUM
	tank            ONLINE       0     0     0
	  raidz1        ONLINE       0     0     0
	    ad6s2       ONLINE       0     0     0
	    ad8s2       ONLINE       0     0     0
	    ad10s2      ONLINE       0     0     0
	logs            ONLINE       0     0     0
	  label/zil     ONLINE       0     0     0
	cache
	  label/zcache  ONLINE       0     0     0

errors: No known data errors
guriandgura# 

arc_summary for FreeBSD

ZFSのキャッシュ(ARC;Adjustable Replacement Cache)の
統計情報を出してくれるスクリプトがあったが
Solaris用なのでFreeBSDではそのままでは動かないのでちょっと修正。
もとはperlだったが、書き方がわからなかったのでshellに。
http://bitbucket.org/koie/arc_summary/
記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2022-08-15
    • 今日の練習 2022-08-15
    • COLORIA
    • COLORIA
    • COLORIA
    • COLORIA
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ