btrfs使ってるfedoraが起動失敗
fedora19でrootボリュームにbtrfsを使っているのだが、電源が落ちて強制終了後にOS起動が失敗するようになった。
レスキューモードで起動してマウントを試みたところ以下のエラーが。
# sudo mount -t btrfs /dev/sdb /mnt/sysimage mount: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so.
demsgには、
[ 1043.660260] BTRFS error (device sdb) in open_ctree:2816: errno=-22 unknown (Failed to recover log tree)
logtreeが壊れている?
ひとまずrepairを試みてみる。
# btrfsck --repair /dev/sdb enabling repair mode Checking filesystem on /dev/sdb UUID: 9a1ef990-cd73-4b98-b57d-72901991e064 checking extents checking free space cache cache and super generation don't match, space cache will be invalidated checking fs roots checking csums checking root refs found 3945306293 bytes used err is 0 total csum bytes: 11398148 total tree bytes: 382119936 total fs tree bytes: 346251264 total extent tree bytes: 20398080 btree space waste bytes: 111504768 file data blocks allocat
まだ同じメッセージが出てマウントできない。
logを作り直してみる。
# btrfs-zero-log /dev/sdb
今度はうまくマウントできた。
中身も無事な模様。
log作り直してるのでどこかおかしいかもしれないけどまあ何とかなるだろう。。。
redisでaof,saveを有効化している場合にdiskを使い切るとどうなるか
redisはオンメモリで動くがファイルに書き込む設定をいれることで永続性を保つことができる。
そのファイルが書き込めなくなるとどうなるか調べてみた。
redisサーバ情報
amazon linux 3.4.37-40.44.amzn1.x86_64
redis 2.6.10
master slaveの2台構成
以下の設定でそれぞれ調査
#定期dump有効化 save 300 1
#aof出力有効化 appendonly yes appendfsync everysec
適当にddでtestファイルを使ってdisk容量を増やしておく
$ df -h Filesystem Size Used Avail Use% マウント位置 /dev/xvda1 7.9G 7.8G 5.2M 100% / tmpfs 298M 0 298M 0% /dev/shm
そしてredisにひたすらセットするだけのスクリプトを叩く
$ ./set.py
でdiskがいっぱいになるとどうなるか見てみる
dump 有効化の場合
自動でbgsaveが走った際にdiskスペースが足りないと次のメッセージがlogに出力され続けた。
手動でbgsaveの場合は1セットのみの出力だった。
[10124] 16 Aug 13:00:07.597 # Write error saving DB on disk: No space left on device [9532] 16 Aug 13:00:07.606 # Background saving error [9532] 16 Aug 13:00:07.616 * 1 changes in 30 seconds. Saving... [9532] 16 Aug 13:00:07.642 * Background saving started by pid 10125
redis-cliからinfoで見ると以下の出力
replicationも止まるようだ。
rdb_last_bgsave_status:err 中略 # Replication role:master connected_slaves:1 slave0:10.0.31.222,6379,wait_bgsave
※何度かinfoを打つとたまにconnected_slaveが0になっていた。
slave側ではmaster_link_status:downが確認できた。
この状態になった段階でset.pyで以下のメッセージが返ってきた
redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
redis-cliからも同じ。
redis 127.0.0.1:6379> set 1 a (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
getは問題なくできた。
redis 127.0.0.1:6379> get 1 "10000000"
どうやら更新を受け付けないらしい。
ソースコードを見るにsave処理が正常に終了するまでは更新させないようにしているようだ。
- redis.c
1046 shared.bgsaveerr = createObject(REDIS_STRING,sdsnew( 1047 "-MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. \r\n")); 1607 /* Don't accept write commands if there are problems persisting on disk. */ 1608 if (server.stop_writes_on_bgsave_err && 1609 server.saveparamslen > 0 1610 && server.lastbgsave_status == REDIS_ERR && 1611 c->cmd->flags & REDIS_CMD_WRITE) 1612 { 1613 flagTransaction(c); 1614 addReply(c, shared.bgsaveerr); 1615 return REDIS_OK; 1616 }
aof出力有効化の場合
set.pyの出力
redis.exceptions.ConnectionError: Error 111 connecting 127.0.0.1:6379. Connection refused.
redis-cliの場合
not connected>
つなげない。。。
ps -ef |grep [r]edis
いない。。。
どうやらredisのプロセスが落ちた模様
ログを見ると
Aug 15:08:49.067 # Exiting on short write while writing to the append-only file: Success
の出力が最後にがされていた。
まとめ
bgsaveが正常終了しないと更新不能になりレプリケーションが停止する。
※起動時にもbgsaveが走るので失敗するので同じ状態になる
aofファイルにdisk容量の影響で追記できなくなくなるとredisのプロセスが落ちる。
※aofファイルへの追記はハードリンクをしているようで起動中にリネームしても追記はしてくれた。
削除してもredisプロセスに影響はなかった。
redis専用サーバの場合はそうそうDISKがいっぱいになることはないだろうけど
loglevelをdebugのままにしてローテートしてないとかあると容量食ってしまうのでそのあたりも注意しないといけない。
あと監視も。
Linux(fedora17)でshrewvpnを使う時のメモ
インストール
ソースを公式ページよりダウンロード
http://www.shrew.net/download/ike
適当な場所に解凍してディレクトリに移動。
$ tar xvzf ike-2.1.7-release.tgz $ cd ike $ cmake -DDEBUG=YES -DQTGUI=YES -DNATT=YES $ make $ make install
かなり多くのモジュールが必要になるのでエラーが出たらその都度メッセージを確認してモジュールをインストールする。
fedora17の場合はすべてyum経由でインストールできた。
起動と設定
※事前にSELINUXのポリシーを追加するか、無効にしておくこと。~
getenforce で enforcing以外ならOK~
デーモンの起動
$ sudo iked
- GUIの起動
$ sudo ikea
※&をつけて起動したほうがいいかもしれない~
- 設定
ikeaを起動してwindows用の設定資料を見ながらと同じように設定する。~
一部項目名が微妙に違うものがあるが近いものを選択すればOK。~
接続
そのまま接続しても対向セグメントへのルーティングが入らないので以下のコマンドを実行する。
$ sudo route add -net 172.16.10.0 gw 192.168.0.0 netmask 255.255.255.0 $ sudo route add -net 172.16.10.255 gw 192.168.0.0 netmask 255.255.255.255
- 確認
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default web.setup 0.0.0.0 UG 0 0 0 wlan0 xxx.xxx.xxx.xxx web.setup 255.255.255.255 UGH 0 0 0 wlan0 172.16.10.0 3538-fedora 255.255.255.0 UG 0 0 0 tap0 172.16.10.255 3538-fedora 255.255.255.255 UGH 0 0 0 tap0 192.168.0.0 * 255.255.255.0 U 0 0 0 wlan0 192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0
$ ping 172.16.10.20 PING 172.16.10.20 (172.16.10.20) 56(84) bytes of data. 64 bytes from 172.16.10.20: icmp_req=1 ttl=63 time=12.5 ms 64 bytes from 172.16.10.20: icmp_req=2 ttl=63 time=12.4 ms 64 bytes from 172.16.10.20: icmp_req=3 ttl=63 time=12.7 ms
何回か接続、接続断を繰り返すと設定しても繋がらなくなることがあるのでその時はPCを再起動してみよう。
vftpdめも
ユーザーの追加
追加する
useradd [ユーザー名] passwd [パスワード] mkdir /home/[ユーザー名]/public_html chown [ユーザー名]. /home/[ユーザー名]/public_html
接続確認してみる 下の例はコマンドプロンプトから接続
>telnet ftpsv01.snws.jp 21 220 Welcome to blah FTP service. 530 Please login with USER and PASS. USER [ユーザー名] 331 Please specify the password. PASS [パスワード] 230 Login successful. quit
ログを確認してエラーが無いか見る
less /var/log/vsftpd.log less /var/log/messages
ユーザー追加時の注意点
local_root=public_html
vftpd.confに上記設定がされている場合はuserlistに追加しても接続ができない~
chrootで各ユーザーのホームディレクトリのpublic_htmlディレクトリに飛ばされるので予め作成をしていなければいけない。
作成していない場合は下記のようなログが出る
Mar 25 10:36:41 ftpsv01 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=nbgi rhost=113x32x146x154.ap113.ftth.ucom.ne.jp user=nbgi~ |<< 基本的な設定は↓な感じ >|| /etc/vsftpd/vsftpdvsftpd.chroot_list (chroot無効ユーザーリスト) /etc/vsftpd/vsftpd.user_list (接続許可ユーザーリスト) /etc/vsftpd/vsftpd.ftpusers (接続拒否ユーザーリスト)
apacheめも
USER-AGENT関連情報
リライト関連
http://d.hatena.ne.jp/Tetsujin/20100804/1280859353~
http://d.hatena.ne.jp/koseki2/20090611/ModRewrite
apache認証
digest認証
- httpd.confに以下のような設定を追加する。
AuthType Digest AuthName "Secret Zone" AuthDigestDomain / AuthUserFile /etc/httpd/.htdigest Require user secret
※古いバージョンのapacheではAuthUserFileが使えないのでAuthDigestFileを使う。
- ダイジェスト認証用のファイルを作成する
htdigest -c .htdigest 'Secret Zone' secret
httdの再起動を行ってブラウザで確認してみる。
SSLの設定 [#q87aae4e]
- 鍵の作成
>||
openssl genrsa -out server.key
openssl req -new -x509 -key server.key -out server.crt
|
※保存ディレクトリに移動してからやること
- confの修正
上記のフルパスをapacheのSSLのconfに記載する。~
SSLCertificateFile /etc/pki/tls/certs/server.crt SSLCertificateKeyFile /etc/pki/tls/certs/server.key
Logmettマクロめも【teraterm】
自動ログイン
パスワード認証
; ******* LogMeTT Macro Template for SSH2 session ******* ; setting hostname = 'xxxx' username = 'xxxx' getpassword 'C:\Users\xxx\Documents\teraterm\terapass.txt' hostname inputstr ; Openning SSH2 connection using port 22. ; User will be prompted for username and password ; connection & login msg = hostname strconcat msg ':22 /ssh /2 /auth=password /user=' strconcat msg username strconcat msg ' /passwd=' strconcat msg inputstr connect msg settitle 'Connected to xxx' ; Entering synchronous communication mode(useful in most cases) setsync 1
※getpasswordのファイルを指定することでパスワード入力を省略できる。デフォルトでは暗号化される
鍵認証 >||
; ******* LogMeTT Macro Template for SSH2 session *******
; Openning SSH2 connection using port 22.
; User will be prompted for username and password
; setting
hostname = 'xxx'
username = 'xxx'
keyfile = 'C:\Users\xxx\Documents\teraterm\xxx_id_rsa'
getpassword 'C:\Users\xxx\Documents\teraterm\terapass.txt' hostname inputstr
; Openning SSH2 connection using port 22.
; User will be prompted for username and password
; connection & login
msg = hostname
strconcat msg ':22 /ssh /2 /auth=publickey /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg inputstr
strconcat msg ' /keyfile='
strconcat msg keyfile
connect msg
settitle 'Connected to xxx.xxx'
; Entering synchronous communication mode(useful in most cases)
setsync 1
|
多段login
logmettで踏み台の配下に以下のマクロを設置する。
; ******* LogMeTT Macro Template for SSH2 session ******* ; Openning SSH2 connection using port 22. ; User will be prompted for username and password ; setting ;; 2段目のSSH接続 host_2nd = 'xxx@xxx' ; 目的のサーバー(2回目のSSH先)のユーザー名とホスト名。例)otp@xxx.xxx.xxx.xxx remote_prompt = '$' ; シェルのプロンプトを指定する。bash系なら「$」、cshなら「%」、tcshなら「>」など ssh_command = 'ssh ' strconcat ssh_command host_2nd hostname = 'xxx' ;username = 'xxx' msg = hostname passwd_prompt = 'pass' connect msg getpassword 'C:\Users\xxx\Documents\teraterm\terapass.txt' hostname inputstr wait remote_prompt sendln ssh_command wait passwd_prompt sendln inputstr
PXEブートでCentOSをインストール
環境
CnetOS6.1
必要なパッケージをインストール
yum install tftp-server tftp xinetd syslinux dhcp
configの設定
vim /etc/xinetd.d/tftp
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s -v /var/lib/tftpboot #-vを追加 disable = no #yesからno per_source = 11 cps = 100 2 flags = IPv4 }
CentOSのイメージファイルをマウント
imageはどっかから取得
mount -t iso9660 -o loop /mnt/iso/CentOS-5.5-i386-bin-1of7.iso /mnt/iso
イメージファイルなどをtftboot下へコピーする
cp -p /mnt/iso/isolinux/initrd.img /var/lib/tftpboot/linux-install/ cp -p /mnt/iso/isolinux/vmlinuz /var/lib/tftpboot/linux-install/ cp -p /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/linux-install/ cp -p /usr/share/syslinux/menu.c32 /var/lib/tftpboot/linux-install/
dhcpサーバの設定
vim /etc/dhcp/dhcpd.conf # dhcpd.conf # log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. subnet 172.16.50.0 netmask 255.255.255.0 { #filename "/linux-install/pxelinux.0"; range 172.16.50.245 172.16.50.246; option routers 172.16.50.1; #range dynamic-bootp 172.16.50.245 172.16.50.246; #自動割振りの場合は有効にする。 default-lease-time 600; max-lease-time 7200; } #自動割振りの場合は以下は不要 host pxe-test { next-server 172.16.50.29; hardware ethernet 00:0c:29:03:84:d3; fixed-address 172.16.50.245; filename "/linux-install/pxelinux.0"; }
設定の確認
# dhcpd -f -d
問題なければdhcpdを起動する。
# /etc/init.d/dhcpd start
kick-startの準備
サンプルをコピーして適当に編集
# cp -p /root/anakonda.ks.cfg /var/www/html/ks-test.cfg # vim /var/www/html/ks-test.cfg # Kickstart file automatically generated by anaconda. #version=DEVEL install url --url=http://172.16.50.29/pxe lang ja_JP.UTF-8 keyboard jp106 network --onboot yes --device eth0 --bootproto dhcp --ip auto --netmask 255.255.255.0 --gateway 172.16.50.1 --nameserver 172.16.20.10 -- hostname CentOS5.5 rootpw passwd #firewall --service=ssh authconfig --enableshadow --passalgo=sha512 #selinux --enforcing timezone Asia/Tokyo bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work clearpart --all --drives=sda part /boot --fstype ext3 --size=100 --ondisk=sda part pv.2 --size=0 --grow --ondisk=sda volgroup VolGroup00 --pesize=32768 pv.2 logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=384 --grow --maxsize=768 logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
pxeブート用のコンフィグファイルを作成
vim /var/lib/tftpboot/linux-install/pxelinux.cfg/default default menu.c32 label 1 menu label ^1) CentOS5.5 kernel vmlinuz append load initrd=initrd.img devfs=nomount ks=http://172.16.50.29/ks-test.cfg label 2 menu label ^2) Boot from local drive localboot
その後はインストールしたい端末をDHCPサーバと同日セグメントに接続して起動する。(BIOSでPXEを有効にしておくこと)