wiki:Developers/kenta

Version 2 (modified by kenta, 11 years ago) (diff)

--

Todo

  • vlmag (due 2010/12/24)

vlmag 下書きメモ

最初に概要

紹介するのは

  • ディスクのイメージをループバックマウントする方法
    1. dd でダンプしたイメージを kpartx
    2. VMWare の VMDK ファイルを qemu-img で変換したあと kpartx
  • chroot でなんちゃって Virtual Machine

参考資料

ぐぐったら、同じことやっている人がいた。  http://d.hatena.ne.jp/adsaria/20080724

事例 1:古い Vine Linux 4.2 の環境を Vine Linux 5.2 にお引っ越し

dd したディスクイメージをループバックマウント

# dd if=/dev/hdX of=/opt/Vine42.dd.img

とやって、ディスクをファイルにダンプ。

でも、このまま

# mkdir /opt/Vine42
# mount /opt/Vine42.dd.img /opt/Vine42
mount: ファイルシステムタイプを指定する必要があります

とやってもマウントはできません。 まず、パーティションの情報を確認。

# fdisk -lu /opt/Vine42.dd.img 
設定する必要があります シリンダ数.
あなたは特別機能メニューからこれを行なうことができます

Disk /opt/Vine42.dd.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = セクタ数 of 1 * 512 = 512 bytes
Disk identifier: 0x000a0970

       デバイス Boot      Start         End      Blocks   Id  System
/opt/Vine42.dd.img1   *          63      208844      104391   83  Linux
/opt/Vine42.dd.img2          208845    15727634     7759395   83  Linux
/opt/Vine42.dd.img3        15727635    16771859      522112+  82  Linux swap / Solaris
領域 3 は異なった物理/論理終点になっています:
     物理=(1023, 254, 63) 論理=(1043, 254, 63)

Startセクタ * 512バイト目がパーティションの始まりになるので、offset を指定してマウントする。

# mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42
# ls /opt/Vine42/
System.map@                 initrd-2.6.16-0vl76.27.img  vmlinuz@
System.map-2.6.16-0vl76.27  initrd.img@                 vmlinuz-2.6.16-0vl76.27
System.map.old@             initrd.old.img@             vmlinuz.old@
config-2.6.16-0vl76.27      kernel.h
grub/                       lost+found/

こっちは /boot パーティションですね。 一旦アンマウントして、/ に対応する 2番目のセクタをマウント。 /boot もついでにマウントする。必要は無いけど。

# umount /opt/Vine42
# umount /opt/Vine42
# mount -o loop,offset=`expr 208845 \* 512` /opt/Vine42.dd.img /opt/Vine42
# mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42/boot 
# df
ファイルシステム     1K-ブロック  使用        空き 使用% マウント位置
/dev/sda3             38456340  26437676  10065160  73% /
none                   2021060         0   2021060   0% /dev/shm
/dev/loop0             7637400   1928112   5321320  27% /opt/Vine42
/dev/loop1              101086      8908     86959  10% /opt/Vine42/boot

これで Vine Linux 4.2 のディスクを Vine Linux 5.2 からアクセスできるようになりました。 でも、ライブラリの依存関係を満たせないので Vine Linux 4.2 のバイナリはほとんどの場合で実行できません。

$ /opt/Vine42/usr/bin/gnome-calculator 
/opt/Vine42/usr/bin/gnome-calculator: error while loading shared libraries: libgnomeui-2.so.0: cannot open shared object file: No such file or directory

ちなみに、dd せずにそのまま mount しても可。

MAKEDEVとか

sshd を動かしてログイン

VMWare Player と chroot 環境でベンチマーク比較

  • I/O で差がつくはずだから、ディスクに負荷がかかるベンチマークを探す

事例 2:Debianベースの ARM 開発環境を Vine Linux 5.2 で使う

  1.  ATDEのVMWare イメージをダウンロード
  2. 分割されたvmdkファイルをディスクのイメージに変換
  3. LVMの構成を確認
  4. kpartx
  5. 試しにAndroidをビルド