私は物好きなのですべてのハードディスクにSystemRescueCDが入っています。
実機のハードディスクをVirtualBox設定して、仮想マシンを起動させると実機のGrubが起動するので
そこからSystemRescueCDを起動させてやればいいのですが、実機のGrubはデフォルトでWindowsが起動します。
同じ領域にあるOSが2重に起動するのは、試してもいませんが、おそらくロックすると思いますが、そうでない場合、
「おそろしくやばそうな感じ」なので、この方法は却下し、仮想ハードディスクにSystemRescueCDをインストールすることにしました。
仮想マシンの作り方
まずバーチャルボックスを起動し、 新規ボタンを押します。
出てきた仮想マシンの作成ダイアログで名前を入力します。私はRealDiskとしました。
タイプはLinuxに設定します。
バージョンは一応SystemRescueCDの元になったGentooを設定しました。
メモリサイズの設定をします、とりあえず128MBとしました。
仮想ハードドライブを作成しますを選択します。
デフォルトのVDIのままにしました。
可変サイズとしました。
デフォルトのままです。
仮想マシンができたら、右クリックして、設定を選びます。
ストレージを選び、CDにSystemRescueCDのISOファイルを設定します。
ネットワークを選び、割り当てを「ブリッジアダプター」に変更します。
仮想マシンへのSystemRescueCDのインストール
仮想マシンを起動させるとメニューが表示されます。そのままEnterを押し、起動させます。
途中で言語を聞かれるので、22を入力します。
プロンプトが表示されたら、fdisk /dev/sdaを実行し、パーティションを1つ作ります。
フォーマットします。:
sshで作業したい場合、パスワードを設定します。私はなぜかTeratermで接続できなかったので、puttyで接続しました。:
マウントし、Grubをインストールします。:
% mkdir /sda1
% mount /dev/sda1 /sda1
% grub2-install --root-directory=/sda1 /dev/sda
SystemRescueCDが起動するようにします。ISOファイルは仮想マシンに持ってくるのが手間なので、
起動に使用したISOファイルをそのまま書き込ませます。:
% mkdir /sda1/boot/sysres
% dd if=/dev/cdrom of=/sda1/boot/sysres/sysres.iso
% vi /sda1/boot/grub2/grub.cfg
grub.cfgには以下を書き込みます。今回は設定を少し凝ってみました。
起動時に3秒以内にESCを押さなければメニューが表示されません。:
set pager=1
#set timeout=10
set default=0
echo -n "Press ESC to show boot menu..."
if sleep --verbose --interruptible 3 ; then
set timeout=0
fi
set sysres_iso=/boot/sysres/sysres.iso
insmod loopback
loopback sysres_disk $sysres_iso
menuentry "RealDisk" {
linux (sysres_disk)/isolinux/rescue32 isoloop=$sysres_iso setkmap=jp
initrd (sysres_disk)/isolinux/initram.igz
}
ここで仮想マシンを停止します。次にCDではなく、仮想ハードディスクから起動させるため、
先ほどストレージ設定に設定してあったSystemRescueCDのISOファイルの登録を解除します。:
SystemRescueCDの起動とバッキングストアの有効化
登録を解除したら仮想マシンを起動させます。自動的にSystemRescueCDが起動します。
さてハードディスクのデータを共有できるようにシステムの設定を行わなければなりません。
とは言うもののLiveCDのシステムイメージから起動しているため、
設定しても再起動すれば、設定は元に戻ってしまいます。(※)
しかし、SystemRescueCDにはファイルを更新するための仕組みがはじめから備わっていて、
Backing-store
を使うとシステムに書き込んだデータを別の書き込み可能な領域に書き込み保存することができます。
まずはこの機能を有効にし、データを書き込む領域は/dev/sda1を使用することにします。
バッキングストアを使用するために、バッキングストア先の/dev/sda1にファイルを作成しなければなりません。
しかし、/dev/sda1はISOイメージがあるため、/livemnt/isostoreに自動的に読み込みのみでマウントされるため、
書き込むことができません。以下のコマンドで読み書きできるよう再マウントします。:
% mount -o remount,rw /livemnt/isostore
次にバッキングストアを作成します。:
% sysresccd-backstore create /livemnt/isostore/sysrcd.bs 256
ハードディスクにバッキングストアをおいた場合、grubのオプションを変更する必要があります。
以下のようにlinux行の最後に backstore=alldevを追加します。:
% vi /livemnt/isostore/boot/grub2/grub.cfg
linux (sysres_disk)/isolinux/rescue32 isoloop=$sysres_iso setkmap=jp backstore=alldev
上記は一行で入力して下さい。変更が終わったらバッキングストアを有効化するために再起動します。:
起動したら先ほど設定したバッキングストア設定されているか確認してみましょう。
確認するためには、mountコマンドを実行してみて、
/dev/loop2が/livemnt/memoryにマウントされていればバッキングストアが働いています。:
% mount | grep memory
/dev/loop2 on /livemnt/memory type ext3 (rw,rela.......
一応関連しているファイルを調べてみます。:
% losetup /dev/loop2
/dev/loop2 [2049]:14 (/livemnt/backstore/sysrcd.bs)
ディスク共有設定
はじめの方で``C:VBox``以下に実ハードディスクにアクセスするためのファイルを作成しましたが、
トラブルを避けるため、仮想マシンに設定していませんでした。ここで仮想マシンを停止します。:
ストレージ設定を開き、実機のハードディスクにアクセスするためのファイルを設定します。
設定が終わったら、また仮想マシンを起動させます。
なおsshで作業したい場合、パスワードを設定します。:
まずはホスト名を設定します。:
% echo HOSTNAME=realdisk > /etc/conf.d/hostname
% /etc/init.d/hostname restart
ファイルシステムをマウントさせるため、fstabに書き加えます。:
% vi /etc/fstab
/dev/mapper/vgdata-data /mnt/data ext4 defaults 0 0
マウントポイントを作ります。:
これだけではうまくマウントされませんでした。
起動時にコマンドを実行させてマウントできるようにします。
(停止時のアンマウントはしているようなので、何もしていません。):
% vi /etc/local.d/mount.start
#!/bin/bash
mount -a
% chmod 700 /etc/local.d/mount.start
% rc-update add local
Windowsからアクセスできるようにするには、smb.confのデフォルト設定をコピーして、
一番下にエントリを書き加えます。:
% cd /etc/samba
% cp smb.conf.default smb.conf
% vi smb.conf
[data]
path = /mnt/data
public = yes
only guest = no
writable = yes
printable = no
sambaを起動時に起動するようにします。:
% rc-update add samba default
% /etc/init.d/samba start
sambaでアクセスするためのユーザーを作成し、パスワードを設定します。
pdbeditコマンドを実行したらパスワードを2回入力します。:
% useradd -mU spp5
% pdbedit -au spp5
MacからはSambaからでもアクセスできますが、いちおうNFSからもアクセスできるようにしてみましょう。
通常は「rc-update nfs default」を実行して、/etc/exportsを書き換えればいいのですが、
ここではよく忘れるので、コマンドでエクスポートする方法を書いて置きます。
再起動すると設定は消えてしまいますので、少しだけの間共有したい場合は便利です。:
% /etc/init.d/nfs start
% exportfs -o rw,insecure,all_squash 192.168.0.1/24:/mnt/data
% exportfs -v
rootのパスワードは起動毎に消されているようです。
再起動するとsshで接続できなくなります。
セキュリティを気にしないなら以下のようにすれば起動時に設定できます。:
% vi /etc/local.d/password.start
#!/bin/bash
cat << EOF | passwd
test
test
EOF
% chmod 700 /etc/local.d/password.start
これで設定は終わりです。仮想マシンを再起動させましょう。:
起動したら、Windowsからアクセスしてみます。
Windowsキー+Rを押し、 ファイルを指定して実行画面で「
\\realdisk
」 (だめならば「
\\LinuxのIPアドレス
」)を入力すれば、Linuxのファイルシステムにアクセスできるはずです。
Macからつなげる場合は、Command+Kを押し、「
smb://realdisk」(だめならば「
smb://(LinuxのIPアドレス」)を入力すれば、
Linuxのファイルシステムにアクセスできるはずです。
使い終わったら、仮想マシンをきちんと終了させましょう。:
VirtualBoxのサービス化(失敗)
Windowsが起動した時に仮想マシンが起動すると便利です。
VirtualBoxをWindowsサービスとして起動させる方法はこの
ブログ が参考になりました。
しかし、私の環境ではサービスは登録できたのですが、仮想マシン自体は起動しませんでした。
Windows
8だからでしょうか。とりあえずそのうち調査することにしてサービス化はあきらめました。
サービスで起動できたらの話ですが、SystemRescueCDはACPI
シャットダウンに対応していませんので、
Windowsの終了時に自動的に停止させることができません。
停止できるようにするにはsys-power/acpidパッケージを入れる必要があります。
インストールするにはGentooのPortageツリーをダウンロードして展開する必要がありますが、
容量が大きいのでローカルのハードディスクに専用の領域を作り、それをマウントしました。
ext4でフォーマットしたところファイルが多いのでi-nodeの数が足りなくなってしまいました。
何も考えずにxfsでフォーマットしなおしました。
また、インストール中にメモリが足りなくなってしまったため、
シングルユーザーモードに切り替えて作業をし直しました。
以下使用したコマンドです。:
% init 1
% vgchange -ay
% lvcreate -n portage -L2G vgdata
% mkfs.xfs /dev/vgdata/portage
% mount /dev/vgdata/portage /usr/portage
% cd /usr/portage
% wget http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/portage-latest.tar.xz
% tar xJvf portage-latest.tar.xz -C /usr
% emerge -av acpid
% rc-update add acpid default
% /etc/init.d/acpid start
これでACPIシャットダウンができるようになります。
インストールした後はportage領域は要らないので、消してしまっても大丈夫です。:
% cd
% umount /usr/portage
% lvremove /dev/vgdata/portage
% shutdown -r now
終わり
0 件のコメント:
コメントを投稿