ファイルシステムの管理
- TODO: 雑なのでそのうち勉強しなおす
ディスクの利用状況の確認
-
ファイルシステムに書き込めなくなった場合、すみやかに原因を特定して復旧しなければならない
- 空き容量不足
- iノード枯渇
-
df
コマンド- 空き容量確認
-
du
コマンド- ファイルやディレクトリが占めている容量の確認
ファイルシステムのチェック
-
fsck
コマンド- ディスクチェック
- 必要であれば修復
-
アンマウントするか、読み取り専用でマウントして実施すること
- 書き込み中に実施するとファイルシステムが壊れる
-
e2fsck
コマンド- ext2/ext3/ext4用
ファイルシステムの管理
-
tune2fs
コマンド-
ext2, ext3, ext4ファイルシステムのさまざまなパラメータを設定
- fsckコマンドのチェック間隔
- 領域サイズの変更
- やはりアンマウントor読み取り専用マウントしておくこと
-
XFS: eXtents File System
- Red Hat Enterprise Linux7, CentOS7の標準ファイルシステム
-
ジャーナリングファイルシステムである
- ファイルシステムの操作をジャーナル(ログ)に記録する仕組みを備える
-
ファイルシステムの整合性チェックを素早く行える
- 障害発生時のリブート時間を短縮できる
ファイルシステムのマウントとアンマウント
マウントの仕組み
-
マウント
-
あるファイルシステムに別のファイルシステムを組み込んで、全体として1つのファイルシステムとして扱えるようにする
- ディスク上のファイルシステム
- リムーバブルメディア
- NFS: Network File System
- デバイスやネットワークの違いが透過的になる
-
-
マウントポイント
-
マウントしたファイルシステムが結合されるディレクトリ
/media
や/mnt
以下空ディレクトリなど
-
/etc/fstabファイル
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=bbddb2bb-7fde-4777-88b4-d762aadc173d / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=9A29-BDC2 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
-
書式
-
<file system>
- デバイスファイル名
- ラベル
-
UUID
blkid
コマンドで得られる
-
<mount point>
- マウント先
-
<type>
- ファイルシステムの種類(先述)
-
<options>
-
マウント時に必要なオプション
- 読み取り専用、とか
-
-
<dump>
- 1:
dump
コマンドによるバックアップ対象 - 0: バックアップ対象外
- ふつうext2/ext3なら1、他は0らしい
- 1:
-
<pass>
- ブート時に
fsck
がチェックする順序 - 0:チェックされない
- 1以上: 昇順
- ルートファイルシステムは1であること
- ブート時に
-
-
UUID: Universally Unique IDentifier
- デバイスの識別に使われる
sudo blkid
...
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sda1: UUID="9A29-BDC2" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="5352c0a6-f610-48e5-9887-d63a6e227709"
/dev/sda2: UUID="bbddb2bb-7fde-4777-88b4-d762aadc173d" TYPE="ext4" PARTUUID="78d3dda3-2950-49fe-bf58-0ed9282a458f"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
...
マウントとアンマウント
mount
MOUNT(8) System Administration MOUNT(8)
NAME
mount - mount a filesystem
SYNOPSIS
mount [-l|-h|-V]
mount -a [-fFnrsvw] [-t fstype] [-O optlist]
mount [-fnrsvw] [-o options] device|dir
mount [-fnrsvw] [-t fstype] [-o options] device dir
- マウント情報取得
mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=4000356k,nr_inodes=1000089,mode=755)
...
- USBメモリをマウントしたときのコマンド備忘録
sudo mkdir /mnt/sdb1
sudo mount /dev/sdb1 /mnt/sdb1
df -a
-
/mnt
を使うのは間違っている気がする/media
を使うのが正しそう
...
+ /dev/sdb1 7558460 343500 7214960 5% /mnt/sdb1
- デバイスファイルとマウントポイントのどちらかを省略すると、
/etc/fstab
を参照して補完する /etc/fstab
にしたがって全マウント
sudo mount -a
umount
- ファイルシステムをアンマウント
sudo umount /mnt/sdb1
-
/etc/mtab
- マウントされているファイルシステムの情報が格納されている
ls -l /etc/mtab
/proc
下ファイル(に見えるやつ)へのシンボリックリンクだった
lrwxrwxrwx 1 root root 19 2019-02-24 02:13 /etc/mtab -> ../proc/self/mounts
/etc/mtab
ファイルに記述されているファイルシステムを全アンマウント
sudo umount -a
ディスククォータの管理
- LPIC 101 ver5.0で丸ごと消えた
- そのうち勉強する
クォータの制限
クォータの適用
クォータの管理コマンド
quota
quotacheck
quotaon
quotaoff
edquota
repquota
ファイルの配置と検索
FHS: Filesytem Hierarchy Standard(ファイルシステム階層標準)
- ファイルシステム内のレイアウトの標準
/bin
- 基本的なコマンド配置
- 一般ユーザでも実行可能
/sbin
- システム管理に必須のコマンドが配置
- rootのみ実行可能
/etc
- 設定ファイル、スクリプトファイル等
/dev
-
デバイスファイルが配置される
- udev: Userspace DEVice management の仕組みにより自動配置
/lib
- 共有ライブラリ
- カーネルモジュール
- とりわけ、
/bin
,/sbin
にあるコマンドが必要とするもの
/media
- リムーバブルメディアのマウントポイント
/mnt
- 一時的にマウントするファイルシステムのマウントポイント
/opt
- パッケージ管理の仕組みを使ってプログラムがインストールされる
- ディストリによっては無い
/proc
- カーネル内部情報へのアクセス
-
仮想的なファイルシステム
- 実際にファイルがあるわけではない
/root
- root氏の
~
- オプション
-
/home
と分けるメリット/home
がマウントできなくなってもシステムのメンテをできる
/boot
- 起動に必要な設定
- カーネルイメージ
-
ディスクの先頭付近に配置されることがある
- BIOSの制限を受けないよう
/home
- 一般ユーザの
~
- オプション
-
独立したファイルシステムにするメリット
- クォータを設定できる
- 保守性向上
/tmp
- すべてのユーザが読み書きできる
-
ディレクトリにはスティッキービットが設定される
- 誰でも書き込めるよう
- かつ、ディレクトリの所有者(root)しかディレクトリを消せないよう
/var
- 頻繁に書き換えられる
/var/cache
-
一時的なキャッシュファイル
man
コマンドで表示するために整形したデータ等
/var/lock
- 排他制御用ファイルを配置
/var/log
- ログ書き出し
/var/run
-
システムの状態を示すファイル
*.pid
ファイルにはPIDが格納されているkill
コマンドに渡したりできる
-
ソケットファイルとかも
*.sock
/var/spool
-
処理待ちデータ
-
印刷待ちデータ
/var/spool/lpd
-
予約されたジョブ
/var/spool/at
-
/usr
- コマンドやユーティリティ
/usr/bin
- ユーザーが一般的に使うコマンド
- 緊急時のシステム保守に必須ではないもの
/usr/sbin
- システム管理コマンド
- 緊急時のシステム保守に必須ではないもの
/usr/lib
- プログラムに必須な共有ライブラリ
/usr/local
-
ローカルシステムで必要とされるもの
- コマンド
- ライブラリ
- ドキュメント
- さらにbin, sbin, lib等細分
/usr/share
-
アーキテクチャ非依存のファイル
-
/usr/share/man
man
コマンドで使うマニュアル
-
/usr/src
- Linuxのカーネルソース等
ファイルの検索
find
FIND(1) General Commands Manual FIND(1)
NAME
find - search for files in a directory hierarchy
SYNOPSIS
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-
point...] [expression]
- 指定したディレクトリ以下、検索式によりファイルやディレクトリを検索
-
検索式(expression)
-
-name ファイル名
- ファイル名検索
-
-atime n
- アクセス時刻が
n*24
時間以内
- アクセス時刻が
-
-mtime n
- 更新時刻が
n*24
時間以内
- 更新時刻が
-
-perm [/-]?mode
-
アクセス権で検索
mode
: 完全一致-mode
: 包含/mode
: どれか含まれる
-
-
-size n[cwbkMG]?
- ファイルサイズで検索
- デフォルト
b
…512バイトブロック単位 c
: char … 1バイトw
: word … 2バイトk
,M
,G
: KiB, MiB, GiB
-
-type c
-
ファイルの種類で検索
- f: ファイル
- d: ディレクトリ
- l: シンボリックリンク
-
-
-user uname
,-group gname
- 所有ユーザ、グループで検索
-
-exec command {} \;
- マッチしたファイルに対してコマンド実行
xargs
的なことできる
-
-ok command {} \;
- マッチしたファイルに対してコマンド実行
- プロンプト
-
locate
find
よりも速い検索- 検索データベースを更新しておく必要あり
updatedb
locate
で使用するデータベースの更新- 多くのディストリで
cron
で定期実行されるそう
/etc/cron.daily/mlocate
#! /bin/bash
set -e
[ -x /usr/bin/updatedb.mlocate ] || exit 0
if which on_ac_power >/dev/null 2>&1; then
ON_BATTERY=0
on_ac_power >/dev/null 2>&1 || ON_BATTERY=$?
if [ "$ON_BATTERY" -eq 1 ]; then
exit 0
fi
fi
# See ionice(1)
if [ -x /usr/bin/ionice ] &&
/usr/bin/ionice -c3 true 2>/dev/null; then
IONICE="/usr/bin/ionice -c3"
fi
# See nocache(1)
NOCACHE=
if [ -x /usr/bin/nocache ]; then
NOCACHE="/usr/bin/nocache"
fi
flock --nonblock /run/mlocate.daily.lock $NOCACHE $IONICE /usr/bin/updatedb.mlocate
- 設定
/etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs devtmpfs fuse.mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ceph fuse.ceph fuse.rozofs ecryptfs fusesmb"
-
PRUNEPATHS, PRUNEFS
- データベースに登録しないディレクトリのパスとファイルシステム
which
- コマンドを探し出して絶対パスを表示
-
環境変数
PATH
に基づいて検索-
一般ユーザが管理者用コマンドを検索することはできないことがある
/sbin
とかがPATH
に含まれていない場合、できない
-
whereis
-
指定されたコマンドについて、下記構成要素のパスを検索
- バイナリ
- ソースコード
- 設定ファイル
- マニュアル
whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
type
-
指定のコマンドの分類を出力
- シェル組み込み
- 通常の実行ファイル
- エイリアス
-
bash組み込みコマンドっぽい
- eshellにはない
type type
type はシェル組み込み関数です
type bash
bash は /bin/bash です
type ls
ls は `ls --color=auto' のエイリアスです