Solaris 10 に Centos 5 をリモートマウントする
訳あって sparc solaris 上で運用していた svn サーバを centos に移行することにした。
まずは svndump を取るために全体の容量と作業スペースを確認する。
# du -sh /path/to/repo
14G /path/to/repo
けっこう容量を喰っている。作業スペースを探してみると
# df -h Filesystem size used avail capacity Mounted on (snip) /dev/dsk/c0t0d0s0 11G 9.7G 832M 93% / /dev/dsk/c0t0d0s5 5.8G 4.9G 829M 86% /var /dev/dsk/c0t0d0s7 49G 43G 5.5G 89% /path
絶望的。困った。
NFS
移行先の centos には 1TB の外付け HDD がマウント済みで容量は潤沢にある。
# df -h Filesystem Size Used Avail Use% Mounted on (snip) /dev/xxx 901G 27G 828G 4% / /dev/sda1 99M 18M 76M 20% /boot /dev/sdb1 917G 224G 648G 26% /backup
ちょっと調べてみたところ、NFS ( Network File System - Wikipedia ) という手法で任意のディレクトリをネットワーク間で共有できるようなので、centos を NFS サーバにして外付け HDD を solaris と共有してみることにした。
NFS サーバに必要なパッケージは既にインストールされている。
# yum list installed | grep nfs nfs-utils.i386 1:1.0.9-44.el5 installed nfs-utils-lib.i386 1.0.8-7.6.el5 installed
/etc/exports を編集して /backup ディレクトリを LAN 内のマシン全てに読み書き可で共有する。
/backup xxx.xxx.xxx.0/24(rw,sync,no_root_squash,no_all_squash)
必要なサービスを片端から起動する。nfslock は初めから起動していたご様子。
# service portmap start Starting portmap: [ OK ] # service nfslock start # service nfs start Starting NFS services:[ OK ] Starting NFS quotas:[ OK ] Starting NFS daemon:[ OK ] Starting NFS mountd:[ OK ] Starting RPC idmapd:[ OK ]
共有した /backup ディレクトリを solaris に /mnt/nfs としてマウントする。
# mkdir /mnt/nfs # mount -F nfs -o vers=3 xxx.xxx.xxx.xxx:/backup/ /mnt/nfs (snip) /dev/dsk/c0t0d0s0 11G 9.7G 832M 93% / /dev/dsk/c0t0d0s5 5.8G 4.9G 829M 86% /var /dev/dsk/c0t0d0s7 49G 43G 5.5G 89% /path xxx.xxx.xxx.xxx:/backup/ 917G 235G 635G 27% /mnt/nfs
無事にマウントできた。よかった。
svnadmin
喜び勇んで svnadmin dump を実行したらコケた。
# svnadmin dump /path/to/repo/ > /mnt/nfs/xxx.dmp ld.so.1: svnadmin: fatal: libgcc_s.so.1: open failed: No such file or directory Killed
なにやらライブラリにパスが通っていないらしい。不足しているライブラリを確認して LD_LIBRARY_PATH に追加する。
# which svnadmin /usr/local/bin/svnadmin # ldd /usr/local/bin/svnadmin libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0 libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0 libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0 libsvn_fs_base-1.so.0 => /usr/local/lib/libsvn_fs_base-1.so.0 libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0 libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0 libaprutil-0.so.0 => /usr/local/lib/libaprutil-0.so.0 libdb-4.2.so => /usr/local/BerkeleyDB.4.2/lib/libdb-4.2.so libexpat.so.0 => /usr/local/lib/libexpat.so.0 libiconv.so.2 => /usr/local/lib/libiconv.so.2 libapr-0.so.0 => /usr/local/lib/libapr-0.so.0 libsendfile.so.1 => /usr/lib/libsendfile.so.1 librt.so.1 => /usr/lib/librt.so.1 libm.so.2 => /usr/lib/libm.so.2 libnsl.so.1 => /usr/lib/libnsl.so.1 libresolv.so.2 => /usr/lib/libresolv.so.2 libpthread.so.1 => /usr/lib/libpthread.so.1 libsocket.so.1 => /usr/lib/libsocket.so.1 libz.so => /usr/lib/libz.so libc.so.1 => /usr/lib/libc.so.1 libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libgcc_s.so.1 => (file not found) libaio.so.1 => /lib/libaio.so.1 libmd5.so.1 => /lib/libmd5.so.1 libmp.so.2 => /lib/libmp.so.2 libscf.so.1 => /lib/libscf.so.1 libdoor.so.1 => /lib/libdoor.so.1 libuutil.so.1 => /lib/libuutil.so.1 /platform/SUNW,Sun-Fire-V210/lib/libc_psr.so.1 /platform/SUNW,Sun-Fire-V210/lib/libmd5_psr.so.1 # find / -name libgcc_s.so.1 /usr/sfw/lib/sparcv9/libgcc_s.so.1 /usr/sfw/lib/libgcc_s.so.1 # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/sfw/lib/
再度 svnadmin dump を実行
# svnadmin dump /path/to/repo/ > /mnt/nfs/xxx.dmp * Dumped revision 0. * Dumped revision 1. * Dumped revision 2. ...
できた。良かった。