これ本当なのか?
サーバ交換とかした後に、交換後起動したサーバからそのつながってるスイッチのデフォルトゲートウェウイにPing飛ばしたら、スイッチ側のそのサーバIPのARP情報がよしなに書き換えられるという話。
とりあえず、サーバ同士では書き換わった。
これがうまくいったらスイッチ側でARPクリアとか必要ないような。
ブート時にIP設定してる数だけデフォルトゲートウェイにPing飛ばすスクリプト仕込めばいいだけになってしまう・・・・・
怪しいなぁ。
「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。
これ本当なのか?
サーバ交換とかした後に、交換後起動したサーバからそのつながってるスイッチのデフォルトゲートウェウイにPing飛ばしたら、スイッチ側のそのサーバIPのARP情報がよしなに書き換えられるという話。
とりあえず、サーバ同士では書き換わった。
これがうまくいったらスイッチ側でARPクリアとか必要ないような。
ブート時にIP設定してる数だけデフォルトゲートウェイにPing飛ばすスクリプト仕込めばいいだけになってしまう・・・・・
怪しいなぁ。
perlでforkする実験を色々してみた。
結構色々分かったのでメモ。
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
# 並行して生むことが出来る子の数
my $child_max = 3;
my $child_num = 0;
# 処理は30回
my $roop_max = 30;
my $roop_count = 0;
my ($pid, $wait_pid, $sleep_time);
while ($roop_count != $roop_max) {
$pid = fork;
# 親が子を生むときは子のPIDを返す
# 子がforkするときは0を返す
# 失敗したら未定義値を返す
if ($pid ne 0) {
# 親の処理
$child_num++;
print "roop[$roop_count] fork child: ]
all_child_num[$child_num] child_pid[$pid]\n";
} elsif (defined $pid) {
# 子の処理
$sleep_time = rand 10;
print "roop[$roop_count] start child process task:
all_child_num[$child_num] task[sleep $sleep_time]\n";
sleep $sleep_time;
exit 0;
} else {
exit 1;
}
# 親の子プロセス数管理
if ($child_num == $child_max) {
print "roop[$roop_count] start wait child process:
all_child_num[$child_num]\n";
$wait_pid = wait;
$child_num--;
print "roop[$roop_count] finish wait child process:
all_child_num[$child_num] exit_child_pid[$wait_pid]\n";
}
$roop_count++;
}
# 子プロセスが全て終わるのを待つ
# wait()はどれかの子プロセスを待つ
# waitする子プロセスが無ければ-1を返す
while ($wait_pid ne "-1") {
$wait_pid = wait;
print "roop[$roop_count] wait all child process:
all_child_num[$child_num] exit_child_pid[$wait_pid]\n";
}
LVMを用いてファイルシステムを構築していて、そのHDDが壊れた時など、データ損傷し過ぎでどうにもこうにもいかなくなることがある。
そこで、別OSを起動してその壊れたHDDをマウントし、必要なデータを抜き出すにはどうしたらいいか。
ちょっと苦戦したので、そのメモ。
1,OS起動中にSATAを認識させる(HDDをSATAケーブルで接続後)
# echo "scsi add-single-device 01 00 01 00" > /proc/scsi/scsi
※数字は「scsi番号 Channel Id Lun」、今回は「01 00 01 00」だった。
2,SATAが認識されたか確認
# cat /proc/scsi/scsi Host: scsi1 Channel: 00 Id: 01 Lun: 00 Vendor: ATA Model: Maxtor 6Y080M0 Rev: YAR5 Type: Direct-Access ANSI SCSI revision: 05
3,LVMがデバイス内にあるか、物理ボリューム→ボリュームグループ→論理ボリュームの順にスキャン
# pvscan PV /dev/sdb2 VG VolGroup00 lvm2 [76.22 GB / 32.00 MB free] Total: 1 [76.22 GB] / in use: 1 [76.22 GB] / in no VG: 0 [0 ] # vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 # lvscan ACTIVE '/dev/VolGroup00/LogVol00' [74.25 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [1.94 GB] inheri
4,マウントしたいLVMボリュームグループを有効化
# vgchange -ay VolGroup00
5, /dev内にLVMのボリュームが見えるようになったので、マウント
# mount /dev/VolGroup00/LogVol00 /mnt # ls /mnt/ bin/ boot/ dev/ etc/ home/ lib/ lost+found/ media/ misc/ mnt/ net/ opt/ proc/ root/ sbin/ selinux/ srv/ sys/ tmp/ usr/ var/
6,データ吸出しちゃってください。
#!/bin/sh . /etc/init.d/functions # 色々書いて・・・ for chek in 1 2 3 do # 重要なコマンドを3回実行して・・・ RETVAL=$? [ $RETVAL = 0 ] && success && echo [ $RETVAL != 0 ] && failure && echo done exit 0
でこれを実行すると、
# ./boot_script.sh check 1 : [失敗] check 2 : [失敗] check 3 : [ OK ]
てな感じで、起動スクリプトのような出力が可能。
結構使えて、意外と忘れてしまうmysqlのコマンドをメモっとこう。
・数字を大小でソート(数字の桁数をそろえてソートすればおk)。
10桁にそろえて、降順でソート。
mysql> select * from テーブル where カラム like "%ワード%" order by LPAD(size, 10, '0') DESC;
その他色々↓