NetBSD Advent Calendar 2017 7日目の記事です。
今日はnilfsをNetBSDで試してみたよ!(試しただけ...)の話をしようと思います。単に試してみたよ、的な話ですがNetBSDでサポートしている様々なファイルシステムを試してみるための足がかかりになればと思います。
nilfsって何?
nilfaは「連続的にスナップショットを作成することを特徴とする Linux 向けのログ構造化ファイルシステムです。 」(nilfs公式サイトより引用)とのことで、現在はLinuxカーネルに取り込まれているファイルシステムの一つです。
Wikipediaのnilfsの記事を見ると、対応プラットフォームに"NetBSD"が含まれています。カーネルソースコードをgrepしてみると、確かにnilfs関連のソースコードが存在しているようです。
fpig@vmnbsd71 sys $ find fs/ -type f | grep nilfs | grep -v CVS
fs/nilfs/files.nilfs
fs/nilfs/Makefile
fs/nilfs/nilfs_bswap.h
fs/nilfs/nilfs.h
fs/nilfs/nilfs_mount.h
fs/nilfs/nilfs_fs.h
fs/nilfs/nilfs_vfsops.c
fs/nilfs/nilfs_subr.c
fs/nilfs/nilfs_subr.h
fs/nilfs/nilfs_vnops.c
nilfsを有効にしたカーネルを作成してみる
カーネルコンフィグレーションでnilfsを有効にしてビルドします。ビルド手順はこちらの記事をご参照ください。
fpig@vmnbsd71 ~ $ cd /usr/src/sys/arch/amd64/conf/
fpig@vmnbsd71 conf $ diff -ur GENERIC ADVCAL2017
--- GENERIC 2016-12-23 15:33:56.000000000 +0900
+++ ADVCAL2017 2017-12-03 18:21:12.000000000 +0900
@@ -157,8 +157,8 @@
file-system CODA # Coda File System; also needs vcoda (below)
file-system PTYFS # /dev/ptm support
#file-system UDF # experimental - OSTA UDF CD/DVD file-system
-#file-system HFS # experimental - Apple HFS+ (read-only)
-#file-system NILFS # experimental - NTT's NiLFS(2)
+file-system HFS # experimental - Apple HFS+ (read-only)
+file-system NILFS # experimental - NTT's NiLFS(2)
# File system options
options QUOTA # legacy UFS quotas
ビルドしたカーネルでNetBSDを起動すると、nilfsが利用できるようになります。
nilfsでフォーマットしたディスクイメージを用意する
実はNetBSDでのnilfsサポートは現状だと読み込みのみのため、nilfsでのフォーマットとファイル書き込みはLinuxでの作業になります...。
以下はLinux(Ubuntu 16.04.3 LTS)での作業になります。
nilfs関連ツールのインストール
root@2f4f2dea8c03:~# apt-cache search nilfs
libguestfs-nilfs - guest disk image management system - NILFS v2 support
nilfs-tools - Continuous Snapshotting Log-structured Filesystem
nilfs-tools-dbg - Continuous Snapshotting Log-structured Filesystem (debug)
root@2f4f2dea8c03:~# apt-get install -y nilfs-tools
コマンドとしては以下がインストールされます。
root@2f4f2dea8c03:~# dpkg -L nilfs-tools | grep bin\/
/sbin/nilfs_cleanerd
/sbin/mkfs.nilfs2
/sbin/umount.nilfs2
/sbin/mount.nilfs2
/usr/sbin/nilfs-tune
/usr/sbin/nilfs-clean
/usr/sbin/nilfs-resize
/usr/bin/dumpseg
/usr/bin/chcp
/usr/bin/lssu
/usr/bin/mkcp
/usr/bin/lscp
/usr/bin/rmcp
ディスクイメージを作成する
# # 256MBのディスクイメージを作成する。
root@2f4f2dea8c03:~# dd if=/dev/zero of=nilfs.img bs=26214400 count=10
ディスクイメージをnilfsでフォーマットする
nilfsでディスクイメージをフォーマットしたのち、確認用に適当なファイルを作成します。
root@2f4f2dea8c03:~# mkfs.nilfs2 ./nilfs.img
mkfs.nilfs2 (nilfs-utils 2.2.3)
Start writing file system initial data to the device
Blocksize:4096 Device:./nilfs.img Device Size:262144000
File system initialization succeeded !!
root@2f4f2dea8c03:~# mount -o loop nilfs.img ./mnt_nilfs/
root@2f4f2dea8c03:~# mount | grep nilfs
/root/nilfs.img on /root/mnt_nilfs type nilfs2 (rw,relatime)
root@2f4f2dea8c03:~# echo 'Hello,nilfs.' > ./mnt_nilfs/hello.txt
root@2f4f2dea8c03:~# cat ./mnt_nilfs/hello.txt
Hello,nilfs.
このディスクイメージをNetBSD環境に持っていてファイルの中身がみられるか試してみます。
NetBSDでのnilfsマウント
vndconfg
でディスクイメージをループバックマウントするための準備を行います。
fpig@vmnbsd71 ~ $ sudo vnconfig vnd0 nilfs.img
fpig@vmnbsd71 ~ $ sudo vnconfig -l
vnd0: / (/dev/wd0a) inode 185547
vnd1: not in use
vnd2: not in use
vnd3: not in use
マウントして確認してみる
nilfsファイルシステムをmountしてみます。現状は読み取り専用でのmountになります。
以下の手順で無事にnilfsでフォーマットしたファイルの中身を見ることができました。
fpig@vmnbsd71 ~ $ sudo mount -w -t nilfs /dev/vnd0a /home/fpig/mnt_nilfs
mount_nilfs: Cannot mount /dev/vnd0a on /home/fpig/mnt_nilfs: Read-only file system
fpig@vmnbsd71 ~ $ mount | grep nilfs
/dev/vnd0a on /home/fpig/mnt_nilfs type nilfs (local)
fpig@vmnbsd71 ~ $ cat ./mnt_nilfs/hello.txt
Hello,nilfs.
まとめ
NetBSDでnilfsを試してみました。現状では読み込みのみになっていますが、同様の手法でNetBSDがサポートするファイルシステム(HFSとか)をお手軽に試してみることができそうです。