勉強日記

チラ裏

LPIC あずき本v5.0 ch5 デバイスとLinuxファイルシステム ch5.2-ch5.4

www.shoeisha.co.jp


ファイルシステムの管理

  • TODO: 雑なのでそのうち勉強しなおす

ディスクの利用状況の確認

  • ファイルシステムに書き込めなくなった場合、すみやかに原因を特定して復旧しなければならない
    • 空き容量不足
    • iノード枯渇
  • dfコマンド
    • 空き容量確認
  • duコマンド

ファイルシステムのチェック

  • fsckコマンド
    • ディスクチェック
    • 必要であれば修復
    • アンマウントするか、読み取り専用でマウントして実施すること
  • e2fsckコマンド

ファイルシステムの管理

  • tune2fsコマンド
    • ext2, ext3, ext4ファイルシステムのさまざまなパラメータを設定
      • fsckコマンドのチェック間隔
      • 領域サイズの変更
    • やはりアンマウントor読み取り専用マウントしておくこと

XFS: eXtents File System

ファイルシステムのマウントとアンマウント

マウントの仕組み

/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らしい
    • <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
ls -l /etc/mtab
lrwxrwxrwx   1 root           root           19 2019-02-24 02:13 /etc/mtab -> ../proc/self/mounts
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

  • すべてのユーザが読み書きできる
  • ディレクトリにはスティッキービットが設定される

/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/src

ファイルの検索

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
    • -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"

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' のエイリアスです