ディスクレスlinux


Rev.1を表示中。最新版はこちら

ラムディスクをマウントし、そこに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
3
pivot_rootを実行することで、/が/ramdisk、元のルートファイルシステムが/ramdisk/old-root/にマウントされ、DISKレスのlinuxが作成されました。/は/ramdiskその物です。
[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

補足

プロセスのcwd/rootが/ramdisk/old_rootだと、pivot後のcwd/rootは/になります。


最終更新 2014/08/14 18:47:53 - north
(2014/08/14 18:47:53 作成)


検索

アクセス数
3703281
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。