ディスクレスlinux
Rev.2を表示中。最新版はこちら。
ラムディスクをマウントし、そこにold-rootとlibディレクトリを作成します。[root@localhost /]# mount -t ramfs none /ramdisk [root@localhost /]# touch /ramdisk/this_is_ramdisk [root@localhost /]# mkdir /ramdisk/old-root [root@localhost /]# mkdir /ramdisk/lib [root@localhost home]# ls -l /ramdisk/ 合計 0 drwxr-xr-x 2 root root 0 8月 15 00:34 lib drwxr-xr-x 2 root root 0 8月 15 00:33 old-root -rw-r--r-- 1 root root 0 8月 15 01:26 this_is_ramdiskとりあえず、lib下にオリジナルの/lib/を複写しておきます。(pivot後にlddのパスを設定することで必要ないかと思いますが。)下手すると、にっちもさっちもいかなくて、リセットということになります。
[root@localhost /]# cp /lib/* /ramdisk/lib/ cp: ディレクトリ `/lib/alsa' を省略しています cp: ディレクトリ `/lib/crda' を省略しています cp: ディレクトリ `/lib/dbus-1' を省略しています : : cp: ディレクトリ `/lib/terminfo' を省略しています cp: ディレクトリ `/lib/tls' を省略しています cp: ディレクトリ `/lib/udev' を省略しています cp: ディレクトリ `/lib/xtables' を省略していますpivot後のカレントプロセスのpwd検証のためで、pivotされるルートファイルシステム下の/home/kitamuraに1/2/3を作成し、cwdを/home/kitamura/1/2としておきます。
[root@localhost /]# cd /home/kitamura/ [root@localhost kitamura]# mkdir 1 [root@localhost kitamura]# cd 1 [root@localhost 1]# mkdir 2 [root@localhost 1]# cd 2 [root@localhost 2]# mkdir 3 [root@localhost 2]# pwd /home/kitamura/1/2 [root@localhost 2]# ls 3pivot_rootを実行することで、/が/ramdisk、元のルートファイルシステムが/ramdisk/old-root/にマウントされ、DISKレスのlinuxが作成されました。/は/ramdiskその物です。/下に必要なコマンドを含め、lkm/デバイスファイル等を設定してあれば、/ramdisk/old-root/をumountすれば完全なDISKレスのlinuxとなります。
[root@localhost 2]# pivot_root /ramdisk/ /ramdisk/old-root/ [root@localhost home]# /old-root/bin/ls -l / total 4 drwxr-xr-x 2 0 0 0 Aug 14 15:34 lib dr-xr-xr-x. 35 0 0 4096 Aug 14 15:31 old-root -rw-r--r-- 1 0 0 0 Aug 14 16:26 this_is_ramdisk [root@localhost 2]# /old-root/bin/ls /old-root apr-tmp.3BYsWv apr-tmp.FIt3Qt apr-tmp.oqMsLF dev lost+found mnt2 opt run sysroot apr-tmp.5Y7Kqs apr-tmp.ThqTwH apr-tmp.q7VcB2 etc media mnt3 proc sbin tmp apr-tmp.5ykbkB apr-tmp.ZvIc0t bin export misc mnt4 pstore sd usr apr-tmp.8wM2lK apr-tmp.k94eiT boot home mnt net ramdisk srv va apr-tmp.9UD0AA apr-tmp.oISac7 debugfs lib mnt1 new-root root sys varカレントディレクトはそのままです。同じファイルシステム内の相対的なパス移動は、そのファイルシステムがどこにマウントされようと関係ありません。ただし絶対パスで指定するとエラーとなります。
[root@localhost 2]# pwd /home/kitamura/1/2 [root@localhost 2]# /old-root/bin/ls 3 [root@localhost 2]# /old-root/bin/ls /home/kitamura/1/2 /old-root/bin/ls: cannot access /home/kitamura/1/2: No such file or directory/old-rootを再度ルートファイルシステムとすることで、元の状態に復帰します。
[root@localhost home]# /old-root/sbin/pivot_root /old-root /old-root/ramdisk [root@localhost home]# ls / apr-tmp.3BYsWv apr-tmp.FIt3Qt apr-tmp.oqMsLF dev lost+found mnt2 opt run sysroot apr-tmp.5Y7Kqs apr-tmp.ThqTwH apr-tmp.q7VcB2 etc media mnt3 proc sbin tmp apr-tmp.5ykbkB apr-tmp.ZvIc0t bin export misc mnt4 pstore sd usr apr-tmp.8wM2lK apr-tmp.k94eiT boot home mnt net ramdisk srv va apr-tmp.9UD0AA apr-tmp.oISac7 debugfs lib mnt1 new-root root sys var [root@localhost home]# ls /ramdisk/ lib old-root this_is_ramdisk