ということを知った。
cpは元がsparse fileならcopy先もsparseになるから
rsyncもそうだと思ってたけど違った。
rsyncは-S(--sparse) を指定しない場合はdefaultでsparseにしない。
古いlinux(fedora core、centos)をp2vする
mdadmを使っているためvmware converterが使えなくて、ssh+tarでp2vする場合の注意点。
参考: http://hogem.hatenablog.com/entry/2016/02/12/233000
inode size
移行先の仮想マシンで何も考えずにmkfsしてinode sizeが256になっていると、
移行元のgrubのバージョンが古いためgrubが入らない。
mke2fsでinode size 128でmkfsしておく。
http://kb.kristianreese.com/index.php?View=entry&EntryID=113
mke2fs -L / -I 128 -F -j -O dir_index /dev/sda1
modprobe
ドライバが古いから/dev/sdaを認識できない場合
http://www.vcdx.nl/2012/11/06/kernel-panic-not-syncing-attempted-to-kill-init/
/etc/modprobe.conf
alias scsi_hostadapter mptbase alias scsi_hostadapter1 mptscsi alias scsi_hostadapter2 mptscsih alias scsi_hostadapter3 mptfc alias scsi_hostadapter4 mptspi alias scsi_hostadapter5 mptsas
からmkinitrdする。
ansibleで牛がしゃべるようになってた
久々に触ったら突然牛が出てきてうけた。
正確にいうとansibleは何も変わってなくて、サーバにcowsayがinstallされたからだった。
_____________ < PLAY [hoge] > ------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
cowsayがinstallされていたらdefaultで牛がしゃべる。
さよなら牛さん
エラーのときにこの牛見るとイラっとするので無効にしておいた。
- /etc/ansible/ansible.cfg
nocows = 1
syslogで受けとったメッセージをアプリケーションで直接読む
久々の更新。
man 5 rsyslog.conf
Named pipes
This version of rsyslogd(8) has support for logging output to named pipes
(fifos). A fifo or named pipe can be used as a destination for log messages
by prepending a pipe symbol (’|’) to the name of the file. This is handy for
debugging. Note that the fifo must be created with the mkfifo(1) command
before rsyslogd(8) is started.
rsylsog.confに直接コマンド書くのかなと思ったけど、そうではなくて名前付きパイプに出力するらしい。
(名前付きパイプはmkfifoで事前に作っておく)
あとはアプリケーションでその名前付きパイプを開けば良い。
big-ip apm IP Geolocation Match memo
EndPoint Security (Server-Side) - IP Geolocation Match
手動で記述する場合こんなん
expr { [mcget {session.user.ipgeolocation.country_code}] == "JP" || [mcget {session.user.ipgeolocation.country_code}] == "US"
BIG-IP IP Geolocationで地域判別
AFMやAPMで許可する場合にipではなく地域を使ってアクセス許可/拒否したいときにgeolocation使うけど、Databaseが古いと想定外の地域で判定されてしまう。
どやって判定してるねん?と調べて辿り着いたのがここ
- https://support.f5.com/kb/en-us/solutions/public/12000/800/sol12866.html
- https://support.f5.com/kb/en-us/solutions/public/15000/000/sol15042.html
# geoip_lookup 1.1.1.1
DBはこれぽい。
# ls -1 /usr/share/GeoIP/F5GeoIP* /usr/share/GeoIP/F5GeoIP.dat /usr/share/GeoIP/F5GeoIPISP.dat /usr/share/GeoIP/F5GeoIPv6.dat
GeoIP の更新
f5 downloadsからしたらいいらしい。
# geoip_update_data -f </path to RPM file and file name>
VMware vCenter Converter Standalone でconvert出来ないsoftware raid(mdadm)のlinuxをddかssh+tarでP2Vする
タイトルの通りvcenter converterではmdadmをsupportしてないのでdeviceを見つけられず、p2v出来ない。
例えば/bootが見つけられなくてエラーが出るなどで。
There is no '/boot' directory mounted on the source machine. It is required to create a bootable virtual machine. Mount the '/boot' directory on the source machine.
/bootだけ/dev/sda1で他がmdadmだっだとしても、/bootしか見えずにrootが持ってこれないとか。
対処方法はざっくり3つ?
1. cdからresuce bootしてmdadmを削除して物理デバイスをmountするように修正してからconverterを使う
- メンテナンスで停止できるならこっちで良い
2. ddでhddのrawイメージを吸い出し&vmdkに変換して仮想マシンのディスクとして利用する
- ddで読み出すIO負荷、network転送をするので多少影響は出るけど無停止でいける。
- ただし、静止点のようなものは考慮されないので、disk書き込みが続いて、ファイルに差分が出るような場合は
p2v後に別途rsyncや、DBをdump/restoreなどをする必要はある。
3. #パーティション構成が変更になっても良い場合
移行先の仮想マシンをcdブートで起動してdiskを/mnt/sysimageなどでmountしておく
移行元のサーバからssh+tarで移行先のdiskに書き込む
ddでp2v テスト
コピーするのは/dev/sda とする。
hogem.hatenablog.com
基本的には前にkvmで試したこのエントリと同じことをする。
ddでrawイメージで吸い出す
ddを使うので出来上がるファイルサイズ使用量ではなくHDDのサイズと同じになる。
1 network越しに直接remote hostに送る
2. /dev/sda以外でraidにも使用してない別diskをmountしてそこに書き込む
3. nfs mountした場所に書き込む
など。今回は1を使う。
吸い出すHDDの容量+vmdkに変換などを行うので容量に余裕のあるサーバで。
ファイル拾い上げるサーバでnetcatで適当なportでlisten
$ nc -l 10000 > sda.img
吸い出すサーバ
ddをパイプで繋いでnetcatで送信する。
$ dd if=/dev/sda bs=100M | nc remote.server.addr 10000
ssh+tar
p2v先のサーバはcd/isoイメージからlinux rescue sshd でbootする。
(linux rescueだとsshd用の鍵がないので手動で作らないといけない)
diskをmountしておく。(ここでは/mnt/sysimage)
あと、proc, sysなどは実データはなくてsshで送らないのでディレクトリだけ作っておく。
# mkdir /mnt/sysimage # mount /dev/sda1 /mnt/sysimage # cd /mnt/sysimage # mkdir sys dev cgroup srv selinux net proc boot
あとはproc、sysなどの一部パーティションを除外してtarで固めたものをsshで送る
あとはproc、sysなどの一部パーティションを除外してtarで固めたものをsshで送る
ルートパーティションのコピー
(/boot、/home などを別パーティションでわけている場合は、それも除外して個別でコピーする)
# cd / # tar zcf - \ --exclude /sys \ --exclude /dev \ --exclude /cgroup \ --exclude /srv \ --exclude /selinux \ --exclude /lost+found \ --exclude /net \ --exclude /proc \ | ssh root@192.168.0.1 "(cd /mnt/sysimage && tar zxf -)"