CentOS

CentOS 5 インストールメモ


CentOSでウェブサーバーを構築したときの個人的な環境設定の覚書きです。
最低限のセキュリティにつき、本運用はユーザーの自己責任で行ってください。

※この記事はCentOS5.4リリース当時のもので古く
  特に記載がない場合はCentOS5.xによる設定です。
  現在はCentOS6に移行しています。

初回ローカルX起動での設定


電源設定
スクリーンセーバー設定(解除でロックしない)
ホームディレクトリ内を英語表記に戻す
LANG=C xdg-user-dirs-gtk-update
初回のソフトウェア更新(アプリで)
初回のyum update(コンソールで)
sshサーバーを起動させて自動起動をオン

ユーザーアカウントの作成
インストール時にGUIで設定済みの場合は不要
ユーザー名userを作成(GUIでも可能)
login: root
# useradd user ←ユーザー名

ユーザー名userのパスワードを設定
# passwd user ←ユーザー名
New UNUX password: 新しいパスワードを入力
Retype new UNIX password: もう一度新しいパスワードを入力
passwd: all authentication tokens updated successfully.

ログイン・サウンドの停止
メニューから「システム」→「管理」→「ログイン画面」を選択し
「アクセシビリティ」タブを開いて「ログイン画面を表示した時」のチェックをオフ

自動ログイン設定
# vi /etc/gdm/custom.conf
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=username ←自動ログインを許可するユーザー名
[security]
DisallowTCP=false

CentOS 6の場合
# vi /etc/gdm/custom.conf
[daemon]
TimedLoginEnable=true
TimedLogin=username
TimedLoginDelay=1

起動時にキーリング解除画面を表示させない
「アクセサリー」>「パスワードと暗号鍵」
パスワード:login→右クリック→パスワードの変更
新しいパスワードを空欄のままOKを押して
安全ではないストレージに保存でOK

root昇格とsudoユーザーを限定する
$ su - ←suではコマンドが通らないので注意
# usermod -G wheel user ←ユーザー名userをwheelグループに追加

wheelグループのみsudoを許可する
# visudo
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL ←コメント解除

# vi /etc/pam.d/su
wheelユーザーのみroot切り替えができるようにする
auth required pam_wheel.so use_uid ←コメント解除

wheelユーザーのみパスワード無しでroot切り替えできるようにする
auth sufficient pam_wheel.so trust use_uid ←コメント解除

.bashrcをカスタマイズ(一般ユーザー/root用あり)
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'

alias l='ls -CF'
alias la='ls -A'
alias ll='ls -al --color=auto'

このあたりは好みで
alias ee='exit'
alias @@='exit'
alias cls='clear'
alias ::='su -'
alias vi='vim'

alias psgrep='ps aux|grep'
alias hsgrep='history|grep'
alias h='history'

無精者仕様
alias yyup='yum update'
alias apget='sudo apt-get update'  ←CentOSでは動きません

vim野良ビルド用
PATH="$PATH":/usr/local/bin/vim
export EDITOR=/usr/local/bin/vim
alias vi='env LANG=ja_JP.UTF-8 /usr/local/bin/vim "$@"'
alias vim='env LANG=ja_JP.UTF-8 /usr/local/bin/vim "$@"'

export HISTSIZE=2000
export HISTFILESIZE=5000
export HISTCONTROL=ignoredups
 インストール後によくあるエラーをこちらにまとめてみたので参照。

システム設定とカスタマイズ


日本語キーボード設定
1. /etc/sysconfig/keyboard
 KEYTABLE="jp106"  # USになってたら訂正
2. /etc/X11/xorg.conf
 Option "XkbModel" "jp106"  # pc105とかになってたら訂正
 Option "XkbLayout" "jp"   # usになってたら訂正

ホームディレクトリ内を英語表記
LANG=C xdg-user-dirs-gtk-update
「Don't ask me this again」をチェックして「Update Names」をクリック
※ファイルが作成済みの日本語ディレクトリは別ディレクトリとして残ってしまうので
  デスクトップおよびホーム内ディレクトリにファイルを設置する前に名称を変更する

キーボード > レイアウトオプション
CapsLockキー項目:デフォルトのまま変更なし
Controlキー項目:CapsLockキーを追加のCtrlとして扱う(Make CapsLock an addtional Ctrl)
X サーバをkillするためのキーシーケンス
Control+Alt+Backspaceにチェックを入れる
Ctrl+Alt+BackspaceでXを強制終了/再起動
端末を無変換キーで起動する
キーボードショートカット >
[端末を起動する]をクリックして、[無変換]をクリック
ショートカット欄にMuhenkanと表示されればOK

ibusからscim-anthyに切り替える
リポジトリーを追加キー登録
cd /etc/yum.repos.d
wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
wget http://centos.karan.org/kbsingh-CentOS-Misc.repo
rpm -import http://centos.karan.org/RPM-GPG-KEY-karan.org.txt

yum update
yum install anthy scim scim-anthy

システム設定入力メソッドを Anthy + SCIM へ切替える。
設定 >他の個人設定 >入力メソッド
再起動してログインするとCtrl-Space(または半角/全角キー)でローマ字入力できる

geditなどGNOMEアプリを端末からrootで起動する場合
suではなく、su -で昇格しないとエラーになるので注意

起動レベルを5(GUI起動)に設定
# vi /etc/inittab
id:5:initdefault:

サーバーのみでXが不要なら
id:3:initdefault:

起動中に常に詳細を表示する
# vi /etc/rc.d/init.d/functions
460行あたり
# Inform the graphical boot of our current state
update_boot_stage() {
if [ "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb-client ]; then
/usr/bin/rhgb-client --update="$1"
/usr/bin/rhgb-client --details=yes ←追加する
fi
return 0
テキストコンソールの解像度を変更する
# uname -r  起動中のkernelを確認
2.6.18-128.1.10.el5

grub.confのkernel行の最後にvga=値を追加する
vi /etc/grub.conf
現在起動してるkernel行の"rhgb quiet"を削除して
末尾に解像度バラメータとコマンドを追加する
kernel /vmlinuz-2.6.18-128.1.10.el5 ro ==/1 vga=773 ←末尾に追加

値と解像度
771 : 800×600 256色
773 : 1024×768 256色
775 : 1280×1024 256色

不要サービスの停止
サービスやデーモン名は環境やバージョンにより異なります
下記以外のサービスを停止
atd       autofs      crond      haldaemon
httpd     iptables     kudzu      lvm2-moniter
mysqld    network     nmb       microcode_ctl
ntpd      smb        sshd       syslog
portmap   vsftpd      sendmail     messagebus

サービスを一括で停止/自動起動オフにするシェルスクリプト
# vi service_off.sh
#!/bin/sh
while read SERVICE
do
 service $SERVICE stop
 chkconfig $SERVICE off
done << __EOL__
anacron          ←停止したいサービスを1行づつ指定
avahi-daemon
bluetooth
cpuspeed
cups
gpm
hidd
irda
irqbalance
mcstrans
mdmonitor
pcscd
rawdevices
restorecond
yum-updatesd
__EOL__
# chmod +x service_off.sh  実行権限
# ./service_off.sh        スクリプトを起動

yum-updatesdの代替にyum-cronを使う
# yum -y install yum-cron
# /etc/rc.d/init.d/yum-cron start サービスを起動
# service yum-cron start     ←最近はこっちでもいい

夜間 yum 更新の有効化中: [ OK ]

# chkconfig yum-cron on 自動起動をオン

定期的に空きメモリを開放する
drop_cachesで同期済みのキャッシュをメモリに開放する
ノートや低スペックPCで実装メモリが小さい場合は効果あり

スクリプト
# vi cron_drop_caches.sh
date;
echo "total/used/free/shared/buffers/cached";
echo "before";
free -m|grep Mem:;
sync;
echo 3 > /proc/sys/vm/drop_caches;
echo 0 > /proc/sys/vm/drop_caches;
echo "after";
free -m|grep Mem:;

空きメモリの表示とか不要な場合は
以下の3行のみでOK
sync;
echo 3 > /proc/sys/vm/drop_caches;
echo 0 > /proc/sys/vm/drop_caches;

chmod +x cron_drop_caches.sh 実行権限
# ./cron_drop_caches.sh 動作確認
before
Mem: 64396 52907 11489 0 695 49146
after
Mem: 64396 1791 62605 0 0 34 ←空きメモリの増加を確認

スクリプトをcronに登録
1日(1周)に1回でよければ、cron.daily(weekly)に設置

起動時間や間隔を指定する場合
# crontab -e
00 0-23/6 * * * /root/cron_drop_caches.sh  6時間毎に起動する場合

実行時のcronメールがウザいときは末尾に > /dev/null を追加するとメールは送信されない
00 0-23/6 * * * /root/cron_drop_caches.sh > /dev/null      ←エラーのみメールする
00 0-23/6 * * * /root/cron_drop_caches.sh > /dev/null 2>&1  ←エラーもメールしない

prelink、makewhatisを無効にする
低スペックではCPUを占有される場合があるので停止
prelinkを無効
vi /etc/sysconfig/prelink
4行目をnoに変更
PRELINKING=no

prelinkに改竄されたバイナリを元に戻しておく
/usr/sbin/prelink -ua   CentOSの場合
sudo prelink -ua      Ubuntuの場合

makewhatisを無効
chmod 644 /etc/cron.daily/mlocate.cron
chmod 644 /etc/cron.daily/makewhatis.cron
chmod 644 /etc/cron.weekly/makewhatis.cron

SSHの設定


# service sshd start  sshサーバー起動
# chkconfig sshd on  自動起動オン

アクセス制限
外部からのアクセスがウザい場合はhostsファイルに追加しておく
# echo "sshd: 127.0.0.1" >> /etc/hosts.allow  ← サーバー自身からのsshを許可
# echo "sshd: 192.168.1." >> /etc/hosts.allow ← ローカル(例:192.168.1.*)からのsshを許可
# echo "sshd: .ppp.asahi-net.or.jp" >> /etc/hosts.allow ← 特定のホスト(例:xxx.ppp.asahi-net.or.jp)からのsshを許可
# echo "sshd: ALL" >> /etc/hosts.deny ← (上記以外の)全てのsshを禁止

RSA鍵の生成
http://centos.server-manual.com/centos5_ssh_teraterm_rsa.html
Tera term、もしくはコマンドラインでRSA鍵ペアを生成して
公開鍵(id_rsa.pub)をユーザーのホームにSCP転送する

公開鍵のサーバー登録
$ cd ~ ←ユーザーのホームで実行(id_rsa.pub転送済み)
$ mkdir .ssh
$ chmod 700 .ssh
$ cat id_rsa.pub > .ssh/authorized_keys   キー登録
$ chmod 600 .ssh/authorized_keys
$ rm -f id_rsa.pub           使用済みキー削除

sshd_config設定
# vi /etc/ssh/sshd_config
PubkeyAuthentication yes ←コメント解除
AuthorizedKeysFile .ssh/authorized_keys ←コメント解除
PasswordAuthentication no ←コメント解除&変更(キー認証でのログインを確認してから)
ChallengeResponseAuthentication no ←noになっていることを確認

# /etc/rc.d/init.d/sshd reload ←設定ファイルの再読み込み

一旦ログアウトして、Tera termを閉じる
TeraTermを再起動して、「ホスト名」を確認して「OK」。
「ユーザ名」と鍵生成に使用した「パスフレーズ」を入力。
「RSA/DSA鍵を使う」にチェックを入れ、「秘密鍵」をクリック
保存した秘密鍵「id_rsa」を選択して「OK」でログイン。

ログインを確認したら、sshd_configを開いて、PasswordAuthentication noにしておく。

ファイアウォールの設定


iptablesフィルターを使って中国(CN) 韓国(KR)を弾く
# mkdir /root/iptables
# vi /root/iptables/ckfilter_setup.sh
#!/bin/bash

COUNTRYLIST='CN KR'   # 中国(CN) 韓国(KR)を弾く設定。他に弾きたい国がある場合はカントリーコードを追加。
wget -q http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
for country in $COUNTRYLIST
do
for ip in `cat delegated-apnic-latest | grep "apnic|$country|ipv4|"`
do
	COUNTRY=`echo $ip | awk -F"|" '{ print $2 }'`
	DROP_IP=`echo $ip | awk -F"|" '{ print $4 }'`
	TMPCIDR=`echo $ip | awk -F"|" '{ print $5 }'`

	FLTCIDR=32
	while [ $TMPCIDR -ne 1 ];
	do
		TMPCIDR=$((TMPCIDR/2))
		FLTCIDR=$((FLTCIDR-1))
	done
	echo "$DROP_IP/$FLTCIDR" >> /root/iptables//ckip
done
done
# chmod 700 /root/iptables/ckfilter_setup.sh パーミッション設定
# /root/iptables/ckfilter_setup.sh         スクリプトの起動
# rm -f /root/iptables/ckfilter_setup.sh     スクリプトを削除

iptablesの設定
# vi /root/iptables/iptables_setup.sh
#!/bin/bash

################
### 初期設定 ###
################
LOCALNET=192.168.1.0/24

#####################
### IPTABLES STOP ###
#####################
/etc/rc.d/init.d/iptables stop

####################
### Default Rule ###
####################
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

####################
### LOCAL ACCEPT ###
####################
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s $LOCALNET -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#####################
### FRAGMENT DROP ###
#####################
iptables -A INPUT -f -j LOG --log-level debug --log-prefix 'FRAGMENT DROP:'
iptables -A INPUT -f -j DROP

####################
### NetBIOS DROP ###
####################
iptables -A INPUT -s ! $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT -s ! $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -d ! $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -d ! $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP

#####################
### PING OF DEATH ###
#####################
iptables -N PINGOFDEATH
iptables -A PINGOFDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A PINGOFDEATH -j LOG --log-level debug --log-prefix 'PINGDEATH DROP:'
iptables -A PINGOFDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j PINGOFDEATH

########################
### BROAD MULTI DROP ###
########################
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

################
### 113IDENT ###
################
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

###########
### SSH ###
###########
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#####################################################
### DNS(※ポート53を開放する場合はコメントを外す) ###
#####################################################
#iptables -A INPUT -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -p udp --dport 53 -j ACCEPT

############
### HTTP ###
############
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

###########
### SSL ###
###########
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

###########
### FTP ###
###########
iptables -A INPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 4000:4029 -j ACCEPT

############
### SMTP ###
############
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#############
### SMTPS ###
#############
iptables -A INPUT -p tcp --dport 465 -j ACCEPT

############
### POP3 ###
############
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

#############
### POP3S ###
#############
iptables -A INPUT -p tcp --dport 995 -j ACCEPT

############
### IMAP ###
############
iptables -A INPUT -p tcp --dport 143 -j ACCEPT

#############
### IMAPS ###
#############
iptables -A INPUT -p tcp --dport 993 -j ACCEPT

#############
### Rails ###
#############
iptables -A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT

#############
###2ch対策 ###
#############
iptables -t filter -I INPUT 2 -s 206.223.144.0/20 -p tcp --dport 443 -j REJECT 
iptables -t filter -I INPUT 3 -s 206.223.144.0/20 -p tcp --dport 995 -j REJECT 
iptables -t filter -I INPUT 4 -s 206.223.144.0/20 -p tcp --dport 1723 -j REJECT 
iptables -t filter -I INPUT 5 -s 206.223.144.0/20 -p gre -j REJECT 
iptables -t filter -I INPUT 6 -s 207.29.224.0/19 -p tcp --dport 443 -j REJECT 
iptables -t filter -I INPUT 7 -s 207.29.224.0/19 -p tcp --dport 995 -j REJECT 
iptables -t filter -I INPUT 8 -s 207.29.224.0/19 -p tcp --dport 1723 -j REJECT 
iptables -t filter -I INPUT 9 -s 207.29.224.0/19 -p gre -j REJECT

################
### CKFILTER ###
################
if [ -e "/root/iptables/ckip" ]; then
	iptables -N CKFILTER
	iptables -A CKFILTER -j DROP

	for ip in `cat /root/iptables/ckip`
	do
		iptables -I INPUT -s $ip -j CKFILTER
	done
fi

###############
### logging ###
###############
iptables -A INPUT -m limit --limit 1/s -j LOG --log-level debug --log-prefix 'INPUT DROP:'
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-level debug --log-prefix 'FORWARD DROP:'
iptables -A FORWARD -j DROP

/etc/rc.d/init.d/iptables save

/etc/rc.d/init.d/iptables start
# chmod 700 /root/iptables/iptables_setup.sh パーミッション設定
# /root/iptables/iptables_setup.sh         スクリプトの起動

CentOS 6で/etc/modprobe.confが存在するとエラーになる場合がある
WARNING: Deprecated config file /etc/modprobe.conf, all config files belong into /etc/modprobe.d/.
CentOS6から「/etc/modprobe.d/」以下ファイルで設定するので、modprobe.confは必要ないので削除する。
rm -f /etc/modprobe.conf

ckfilterをcronで自動アップデートする
# vi /etc/cron.daily/ckfilter_update.sh
#!/bin/bash

COUNTRYLIST='CN KR'
wget -q -N http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
switch=0
for country in $COUNTRYLIST
do
	for ip in `cat delegated-apnic-latest | grep "apnic|$country|ipv4|"`
	do
		COUNTRY=`echo $ip | awk -F"|" '{ print $2 }'`
		DROP_IP=`echo $ip | awk -F"|" '{ print $4 }'`
		TMPCIDR=`echo $ip | awk -F"|" '{ print $5 }'`

		FLTCIDR=32
		while [ $TMPCIDR -ne 1 ];
		do
			TMPCIDR=$((TMPCIDR/2))
			FLTCIDR=$((FLTCIDR-1))
		done
		echo "$DROP_IP/$FLTCIDR" >> /root/iptables/ckip_new
	done
done

diff /root/iptables/ckip /root/iptables/ckip_new > /dev/null 2>&1

if [ $? -ne 0 ]; then
	mv /root/iptables/ckip_new /root/iptables/ckip
	/root/iptables/iptables_setup.sh > /dev/null
else
	rm -f /root/iptables/ckip_new
fi
# chmod +x /etc/cron.daily/ckfilter_update.sh
# /etc/cron.daily/ckfilter_update.sh   動作確認

# chkconfig iptables on    自動起動設定
# chkconfig --list iptables  設定確認
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
syslog設定でiptables.logの出力先を指定
# vi /etc/syslog.conf   CentOS 5
# vi /etc/rsyslog.conf  CentOS 6
#kern.* /dev/console          ←コメントアウトを確認
どちらかを追加
kern.debug /var/log/iptables.log  ←kernelのdebug(iptablesログ)以上すべてを出力する場合(messages.logと重複あり)
kern.=debug /var/log/iptables.log  ←kernelのdebug(iptablesログ)のみを出力する場合

※古いsyslogではセレクターと出力先の区切りに半角スペースを
  使うと認識できない場合があります。タブを使うようにしましょう。
# /etc/rc.d/init.d/syslog restart  syslogを再起動  CentOS 5
# /etc/rc.d/init.d/rsyslog restart  rsyslogを再起動 CentOS 6

iptables.logをsyslogローテーションに追加
# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler 
/var/log/boot.log /var/log/cron /var/log/iptables.log {
sharedscripts                  ↑
postrotate                  末尾に追加
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

DOS攻撃の対処


# vi /etc/sysctl.conf
↓下記を追加
net.ipv4.tcp_syncookies = 1                              # Syn flood攻撃防御  最近はデフォルトでオンになってる
net.ipv4.icmp_echo_ignore_broadcasts = 1           # Smurf攻撃防御
net.ipv4.icmp_ignore_bogus_error_responses = 1   # ICMPエラー無視
# sysctl -p       カーネルパラーメータを更新
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 1                                  ←[Alt] + [SysRq/(PrtSc)] + [コマンドkey]で制御可能
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key      ←CentOS6だとunknown keyエラーが出る場合あり
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
kernel.exec-shield = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
対処法1
キーがunknownにならないように対応bridgeモジュールをロードする
# modprobe bridge
# lsmod | grep bridge
bridge                 79078  0
stp                     2173  2 bridge,garp
llc                     5546  3 bridge,garp,stp

# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
kernel.exec-shield = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
対処法2
エラーになる設定をコメントアウトする
#vi /etc/sysctl.conf
# Disable netfilter on bridges.
# net.bridge.bridge-nf-call-ip6tables = 0
# net.bridge.bridge-nf-call-iptables = 0
# net.bridge.bridge-nf-call-arptables = 0

カーネルパニック時に自動的に再起動させる


# vi /etc/sysctl.conf
kernel.panic = 5  ←追加する

# sysctl -p       カーネルパラメータを更新
# sysctl -n 'kernel.panic'      設定を確認
5  ←設定値が返ればOK

fsckによるファイルシステムの修復/デフラグ


シングルユーザーモードで起動
起動画面でEキーを押す
GRUB画面で Eキーを押す
kernel行を選択してEキーを押す
最末尾に半角スペースを空け single と入力してエンター
末尾にsingleが追加されてるのを確認してBキーを押す
sh-3.2#_     プロンプトで起動完了(root起動なのでrootパスワード変更も可能)
umount -a   すべてのデバイスをアンマウント
fsck -fpcDv  システムを修復、デフラグ、バッドセクタの修復

REBOOT LINUXと表示されれば完了
rebootで再起動
fsckオプション
f: ファイルシステムが正常でもチェック
p: 自動的にファイルシステムを修復
c: バッドセクタを修復
D: デフラグ
v:  fsckの詳細に出力

Rescueモードでfsck修復する
同じバージョンのインストールCDもしくはレスキューCDで起動
GRUB画面の boot: に続けて linux rescue と入力してEnter
システムのインストール時と同じ設定をダイアログで選択して
mount選択画面が出たらcontinueでシステムをマウントする
/$ _  ←コマンドプロンプトでレスキューモード起動完了
# fsck -f /dev/hda1  ボリュームを修復
WARNING! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage.
Do you really want to continue (y/n)? yes
y エンターで修復
rebootで再起動
ブート時のfsckの間隔を変更する
# tune2fs -c 512 -i 1m /dev/hda1
オプション -c はマウント回数、-iはインターバル(d:日、w:週、m:月)
512回マウントもしくは1ヶ月毎にチェック

最終更新:2018年01月26日 00:25