garbagetown

個人の日記です

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 ) という手法で任意のディレクトリをネットワーク間で共有できるようなので、centosNFS サーバにして外付け 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.
...

できた。良かった。

参考