LPIC-level1を先週取得したので、続けてlevel2を受験する。そのため試験範囲の要点を下記にまとめる。
1. キャパシティプランニング
リソース使用率
- top
- 総合的に見れる
- vmstat
- メモリ/仮想メモリの状態
- vmstat 5 3 (5秒毎に3回出力)
- r -> 実行待ちプロセス数
- b -> 割り込み不可プロセス数(0が好ましい)
- wa -> cpuのIO待ち時間
- buff/cache -> バッファキャッシュ/ページキャッシュ(多くても問題ない)
- iostat
- iotop
- topっぽくI/Oを見る プロセス毎のIO情報
- sar
- system activity report -> システム統計のレポート、多機能
-
sar -b -f /var/log/sa/saXX
-> XX日のレポートを表示 - sadf
- different format -> sadcのログをCSV, TSV, XMLなどで出力(trと組み合わせるなど)
- uptime
- w
- ログイン中ユーザー、プロセスがわかる
- ps
- pstree
- lsof
- プロセス、ポートの状態
- free
- メモリとスワップ
- freeが少なくてもcacheが大きければ問題ない
- /proc/meminfo -> 詳細なメモリ情報
- df
- ファイルシステム毎、ディスクの使用量が分かりやすい
- netstat
- ss
- netstatの代替で、ほぼ同じ
- netserver
- サーバー側
- netperf
- クライアント側
- iptraf
- トラフィックをモニター
リソース監視ツール(覚えられません)
- collected
- Nagios
- MRTG
- Traffic Grapherなのでトラフィックをグラフ化してくれる
- Cacti
- Icinga2
その他リソース管理に関して
- 特定のパーティションにIO集中でボトルネック -> そこだけ高速なストレージに変えてみる
- カーネルの再構築/カーネルパラメータを調整する
-
swapon -s
-> スワップについて確認してみる(/proc/swaps)
2. Linuxカーネル
バージョン
- 4.9-rc1 -> rcはRelease Candidate(開発版)
- バージョンの確認方法 ①
uname -r
②/proc/versionファイル ③Makefileを見る
カーネルイメージ
カーネルモジュール
- カーネルから一部機能を切り離しモジュール化(.ko) -> カーネルがコンパクトになり起動時間やメモリを節約
- lsmod
- /proc/modulesと同じ
- modinfo
- insmod
- rmmod
- modprobe
- 依存関係を解決しながらロード/アンロードしてくれる
-
depmod
-> modules.depファイル(モジュール1.ko: モジュール2.ko モジュール3.ko) - 前処理やエイリアス付けたい -> /etc/modprobe.conf or /etc/modprove.d/ファイルで設定しておく
- ex.
alias eth0 r7257
- kmod -> カーネルの機能で、モジュールが必要になったら自動でロードしてくれる
カーネルのコンパイル
- ソースコード -> /usr/srcらへん
- バージョンアップの方法 -> ①
cp /boot/congig...x86-64 .config
(前設定ファイルを.configにコピー)
-> ②make oldconfig
- カーネルの設定 ->
make menuconfig
- コンパイル ->
make
- カーネルモジュールとカーネルのインストール ->
make modules_install
->make install
- /bootにイメージができてるのでデフォルトのカーネルにしておく
- DKMS -> Dynamic Kernel Module Support(サードパーティのカーネルモジュールを自動的にビルドしてくれる)
-
make clean
make mrproper
カーネルパラメータ(/proc/sys/)
-
sysctl [-w] net.ipv4.ip_forward=1
(再起動で消える) / /etc/sysctl.confに書く(永続)
初期RAMディスク
- initrd / initramfs(cpioアーカイブ + 圧縮)
- 初期RAMディスクの作成 ->
mkinitrd
/mkinitramfs
- 最新のCentOS ->
dracut
コマンドでinitramfsが/boot以下に作成できる
カーネルの管理と問題解決
- lsdev
- lspci
-
lspci -s 2:0
-> 2番バス、0番スロット - lsusb
- ブロックデバイス -> b/ブロック単位/ランダムアクセス/HDD, RAMディスク, RAIDボリュームなど
- キャラクターデバイス -> c/キャラクタ単位/ランダム不可/キーボード, マウス, 端末など
- カーネルが認識しているデバイスが見たい -> /proc/devices
- udev/sysfs -> /etc/udev/rules.d/60-raw.rulesなど
- sysfsがどのようにデバイスを扱っているか ->
udevadm info
で確認(識別に使う) - rulesファイルの識別キー=値にマッチ -> 指定したルールでデバイスファイルが作成される
- デバイスの検知をモニタリング ->
udevadm monitor
3.システムの起動
起動プロセス
- BIOS/UEFI
- ->MBR(ブートローダの一部 + パーティションテーブル)/GPT
- ->MBRのブートローダが二段階目のブートローダを起動
- ->指定されたパーティションからカーネルをロード
- -> ルートパーティションのマウント、/sbin/initの起動
SysVinit
- initが /etc/inittab を読み込む
- -> /etc/rc[0-6].d/S85httpdなど
- -> ログインプロセス起動して終了
- chkconfig
- update-rc.d
- insserv
systemd
- Unit(service/device/mount/swap/target) = 処理単位
- 最初に /etc/systemd/system/defalt.target Unitが処理される
- -> /lib/systemd/system/XX.targetへのシンボリックリンクになっている
- 稼働しているサービスの確認 ->
systemctl list-units --type=○○
- /etc/systemd/system/multi-user.target.wants/Unit設定ファイル達(postfix.serviceなど)
- journalctl
- /var/run/log/journal -> 再起動で消失 -> /etc/systemd/jornald.confでpersistent設定
ブートローダ
GRUB
grub-install
- /boot/grub/menu.lst
- root (hd0,0) -> /dev/sda1のこと
- 対話式シェル ->
grub
GRUB2
grub2-install
- /etc/default/grub ->
grub(2)-mkconfig
-> /boot/grub/grub.cfg - 対話式シェル ->
grub2
起動オプション(起動時に[e]キー)
- ルートファイルシステムの指定 ->
linux /boot/vimlinuz-.4.4.0 ro root=/dec/sda1
- 起動オプションの確認 -> /proc/cmdline
システムの回復
- インストールCD/DVD-ROMからレスキューモードで起動
- rpmコマンドなどルートディレクトリを指定しないといけなくなる ->
chroot
でルートディレクトリの変更 - GRUBの設定ファイルを直す ->
grub(2)-mkconfig
その他ブートローダ
- SYSLINUX
- USBメモリやCD-ROMからのブート
- PXEブート
- ネットワークブート
- TFTP/DHCP/HTTP/NFS
4.ファイルシステム
操作
- /etc/fstab
- UUIDの確認 ->
blkid
- マウントオプション
- noatime -> iノードのアクセス時刻を更新しない = 高速化
- auto
- suid
- user
- users
- defaults -> async/auto/dev/exec/nouser/rw/suid
- カーネルがサポートしているファイルシステムは? -> /proc/filesystems
- どのファイルシステムがマウントされてるか -> /etc/mtab = /proc/mounts
-
mount
/umount
- 再マウント ->
mount -o remount /data
-
sync
-> メモリ上のディスクバッファ領域にあるデータをディスクに書き込む - ファイルにスワップ領域を作る手順↓
dd if=/dev/zero of=/tmp/swapfile bs=1M count=500
mkswap /tmp/swapfile
swapon /tmp/swapfile
- スワップ領域の確認 ->
swapon -s
またはcat /proc/swaps
作成
ext
XFS
Btrfs
- btrfsの使用状況の確認 ->
btrfs filesystem df /mnt
- btrfsでスナップショット ->
btrfs subvolume snapshot A B
CD/DVD
暗号化ファイルシステム
保守
- スーパーブロックのバックアップから修復 ->
e2fsck -b 8193 /dev/sda2
5.高度なストレージ管理
RAID
mdadm
- 状態 -> /proc/mdstat
- 設定 -> /etc/mdadm.conf
- [_U]
- RAIDの構築 ->
mdadm --create /dev/md0 --level 5 --raid-devices 3 A B C
LVM
作成
- パーティションの準備(
parted
) -> 物理ボリューム作成(pvcreate) -> ボリュームグループ作成(vgcreate) -> 論理ボリューム作成(lvcreate) -> ファイルシステム作成(mkfs) -> マウント(mount)
管理(reduce/remove注意)
- pvdisplay
- pvscan
- vgextend
- pvmove
- vgreduce
- pvremove
- vgdisplay
- lvdisplay
- lvextend -> e2fsck -> resize2fs(extファイルシステムの場合)
- xfs_growfs
- lvremove
- スナップショット(
lvcreate -s
) -> バックアップ(dump 0uf
) - 変更があるとスナップショット領域が膨らんでいく
ハードディスク管理
-
hdparm
(IDE) /sdparm
(SATA/SCSI/USB)
SSD
- 磁気ディスクではなくフラッシュメモリに記録
- 削除時は実際にデータを消すのではなくフラグつけるだけ -> パフォーマンス低下 ->
fstrim -v /
iSCSI
- internet + SCSI
- イニシエータ -> ターゲット
6.ネットワーク
- ifconfig
- arp
- ping
- traceroute
- tcpdump
- netstat
-
netstat -l
-> linteningのソケットのみ表示 -
netstat -i
-> インターフェースごとに表示 - ss
- nc
-
nc -vz ipアドレス 1-1000
-> 1-1000の範囲をポートスキャン - ip [link/addr/route/neigh] [show/add]
- route [add/del]
- iwconfig
- iw dev
- iwlist
- nmcli/nmtui
- mtr = my trace route -> 操作
7.システムメンテナンス
ソースからソフトウェアインストールをする
- patch -p0
- patch -p1
- -Rオプション
- 手順
- ソースコードアーカイブを入手・展開(1.tar 2.gunzip ; tar 3.gzip -dc | tar)
- (patchファイルがあれば適用)
- ./configure でMakefile作成
-
make
でコンパイル -
sudo make install
でインストール (all/install/clean) - /usr/local/bin に配置される
バックアップ
-
種類
-
完全
-
差分(フルバックアップと最新の差分バックアップがあれば復元できる)
-
増分
-
ローカルへのバックアップ
-
tar
-
cpio
-
dd
-
dump/restore
-
mt -> ex.
mt -f /dev/st0 fsf 5
-> テープを現在位置から5つ先のデータまで早送り -
リモートへのバックアップ
-
rsync -auvz --delete -e ssh dir username@hostname:/backupdir
ユーザーへの通知
- /etc/motd
- /etc/issue
- /etc/issue.net
wall
番外編.virtualbox
ネットワーク
- 設定をNAT->ブリッジにしておく
- ifup インターフェース名
- ping で通信してみる