Open5

ファイル・パーティション周りメモ

haseyuyhaseyuy

パーティション

  • Linuxでは一つの物理ドライブ(/dev/hda)を複数の論理ディスクに分割して扱うことができる
  • このような論理的なディスクのことをパーティションという
  • 通常は、一つの物理ディスクに対して4つのパーティションを作成することができ、これを「プライマリパーティション」という
  • プライマリパーティションの一つを「拡張パーティション」として使い、拡張パーティションをさらに分割することができる、これを論理パーティションという

パーティション形式

MBR形式(Master Boot Record)

  • 基本パーティション数は4
  • それ以上の数に分割するためには、基本パーティションの一つを拡張パーティションとして割り当て、
    そのパーティションをさらに論理パーティション分割する
  • これらのパーティションに関する操作にはfdisk コマンドを使用する

GPT形式(GUID Partition Table)

  • MBRより新しい方式
  • 基本パーティションを128個作成することができる
  • 最大ハードディスク容量は9.4ZB
  • GPT形式のHDDからOSを起動する場合はシステムファームウェアがUFFIである必要がある
  • fdisk でなくgdisk コマンドを使用する

パーティション作成コマンド

fdiskコマンド(format disk)

  • MBR形式のハードディスクに対してパーティションの作成、削除変更、および情報開示を行える
  • 類似のpartedコマンドのほうがより優れたツールになっている

gdiskコマンド

  • GPT形式のハードディスクに対してパーティションの作成、削除変更、および情報開示を行え

partedコマンド

  • MBR形式、GPT形式をサポートするパーティション操作の対話型ツール
  • 以下の手順を踏む
    1. パーティションテーブルの指定
       - mklabelコマンドで、パーティションテーブルの方式を指定、未指定の場合はMBR形式
    2. パーティションの作成
       - mkpartコマンドで、パーティションを作成
      • printコマンドで作成されたパーティション情報を表示
      • quitコマンドで終了する
haseyuyhaseyuy

ファイルシステム

IDEハードディスクのデバイスファイル
SCSIハードディスクのデバイスファイル

  • /dev/sda1

ファイルシステムの種類

ファイルシステム 説明
ext2 以前のLinuxで標準的に使用されていた規格
ext3 ext2の後継、ジャーナリングファイルシステム
ext4 ext3の後継、ジャーナリングファイルシステム
XFS SGIが開発、ジャーナリングファイルシステム、動的inode
JFS IBMが開発、ジャーナリングファイルシステム、動的inode

inode数の制限

制限あり 制限なし
ext2, ext3, ext4 XFS, JFS

exFAT(Extended FAT)

  • マイクロソフトが開発したプロプライエタリなファイルシステム
  • USBメモリのようなフラッシュドライブ向けのファイルシステム -> 異なるOS間でのデータ共有に使いやすい
  • 従来のFATファイルシステムとの互換性はない
  • LinuxでのexFATの利用にはFUSE(Filesystem in Userspace)が必要

Btrfs(B-tree File System)

  • 論理ボリュームマネージャによって複数デバイスを論理的に一つのデバイスとして扱う(マルチデバイス対応)
  • ディレクトリの一部を「サブボリューム」として個別のファイルシステムのように扱える
  • ファイルシステムが自動でデータを圧縮できるようになっている

mkfsコマンド

  • ファイルシステムの作成コマンド
  • -tオプションでファイルシステムを指定
$ mkfs -t ext4 /dev/sda1

mke2fs

  • ファイルシステムの作成コマンド, ただし作成できるのはext2, ext3, ext4に限られる
  • -jオプションでext3ファイルシステムを作成
haseyuyhaseyuy

ファイル修復

  • システム障害によりファイルシステムに障害が発生した場合、ファイルシステムの整合性チェックと障害箇所の修復を試みることができる
  • 大量かつ高頻度で読み書きを行うと、ファイルシステムに不整合が起きる可能性があるので起動時に/etc/fstabに定義されているチェック対象のファイルシステムに対し、fsckコマンドを実行する

ファイルチェックコマンド

  • XFSはシリコングラフィックス社が開発したジャーナリングシステム
  • RHEL7の標準ファイルシステムとして採用されている
コマンド 説明
mkfs.xfs XFSファイルシステムを作成する
xfs_info ファイルシステムの情報を表示する
xfs_db ファイルシステムのデバッグを行う
xfs_check ファイルシステムをチェックする
xfs_fsr ファイルシステムのデフラグを行う
xfs_repair ファイルシステムを検査/修復する

fsckコマンド(filysystem check)

  • -tオプションでファイルシステムを指定
  • -aオプションで自動的に修復
  • -rオプションで対話的に修復
  • -Nで実際には実行せず、実行する内容を表示
$ fsck -t ext3 -a /dev/sda1

e2fsckコマンド(ext2 filesystem check)

  • ext2/ext3/ext4ファイルシステムの整合性をチェックし、修復する
  • マウントされているファイルシステムに対してこのコマンドは使うのは安全でない
  • -pオプションですべての不良ブロックを自動的に修復
  • -yオプションで全ての問い合わせにYesを解凍
  • -nオプションで全ての問い合わせにNoを解凍

tune2fsコマンド(tune ext2 filesystem)

  • ext2/ext3/ext4ファイルシステムのパラメータを設定するコマンド
  • -jオプションでファイルシステムの変換もできる(jはjournalの略、ext3ファイルシステムはext2にはないジャーナリングシステムがあるから)
  • -L ラベル名でファイルシステムにボリュームラベルを設定
  • -iオプションでファイルシステムのチェックを行うまでの最大時間感覚を設定
  • -cオプションでファイルシステムチェックを行うまでの最大マウント回数を指定

ディスクの利用状況確認コマンド

duコマンド(DiskUsed)

  • ファイルやディレクトリが占めている容量を確認する
  • -sオプション(--summarize)は合計容量を表示
  • -kオプションでキロバイト単位で表示
  • -mオプションでマガバイト単位で表示
合計容量を表示
$ du -s
16 .
  • -c, --totalオプションで合計容量も同時に表示
合計容量も同時に表示
du -c
0	./testdir
16	.
16	total
  • -aオプションでディレクトリ以外にファイルについても表示
ファイルについても表示
# du -a
8	./test1.txt
0	./testdir
8	./test.txt
16	.
  • -S, --separate-dirsオプションで実際に引数で指定された対象による使用量のみ表示、サブディレクトリは含めない

dfコマンド(DiskFree)

  • ファイルシステムん空き容量を確認するコマンド
  • -hオプションで分かりやすい単位を付加して表示(hはhuman readableの略)
$ df -h /dev/sda1
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda1       1014M  266M  749M   27% /boot
haseyuyhaseyuy

マウント

  • デバイスとその上に構築されているファイルシステムをOSに認識させ、指定のディレクトリを割り当て、そのディレクトリ以下のパスでファイルシステム内にアクセスできるようにすること

mtabとfstabの違い

  • mtab : 現在マウントされているデバイスの一覧
  • fstab : デフォルトでマウントされるデバイスを記述, 自動マウントしたいファイルシステムなどは予め記述しておく

現在マウントされているファイルシステムを確認するコマンド

  • mount
  • cat /proc/mounts
  • cat /proc/self/mounts
  • cat /etc/mtab

mountコマンド

  • ファイルシステムをマウントするコマンド
  • option無しだと、現在マウントされているファイルシステム一覧を表示
  • -aオプションで/etc/mtabに記載されているファイルシステムをすべてマウント
  • 現在のマウント情報は/etc/mtabファイルに格納
  • --bind <dir1> <dir2>オプションでdir1をdir2にマウントする
  • 例えば以下のように/foo/barにマウントすることによって、/barには/fooの中身がバインドされる
  • /etc/fstabに設定がない場合は、mount デバイス名 マウントポイントを指定する必要がある
  • 既に/etc/fstabファイルにエントリがある場合はmount デバイス名 マウントポイントのどちらか片方を指定すれば
    片方は/etc/fstabが参照され自動的に決定される
$ mount --bind /foo /bar
fstabでの記述
/foo /bar auto bind 0 0

umountコマンド

  • ファイルシステムのアンマウントするコマンド
  • -aオプションで/etc/mtabに記載されているファイルシステムをすべてアンマウント
  • -tオプションで指定した種類のファイルシステムをアンマウント
  • アンマウントしようとしているファイルシステムが操作中や、プロセスがある場合、device is busyが出る

/etc/fstabファイル

  • ファイルシステムの情報は/etc/fstabに記述されている
  • 自動マウントしたいファイルシステムなどは予め記述しておく
  • 以下の6つの項目がある
    • デバイスファイル名 : デバイスファイル名、ラベル名、UUIDで指定
    • マウントポイント : マウント先のディレクトリ
    • ファイルシステムの種類 : ext2, xfsなど
    • マウントオプション : 必要に応じてオプションを指定
    • dumpフラグ : 1であればdumpコマンドによるバックアップ対象
    • fsckフラグ: Linux起動時に自動で行われるファイルシステムチェック
マウントオプション 説明
async 非同期で入出力を行う
auto mount -a コマンドでマウント
noauto mount -a コマンドでマウントしない
exec バイナリ実行を許可
noexec バイナリ実行を許可しない
ro 読み取り専用でマウント
rw 読み書き許可してマウント
user 一般ユーザでもマウント可能
/ect/fstab
UUID=ece69863-e3b1-442b-bbac-a9c2191ede80 /boot                   xfs     defaults        0 0

デバイスのUUIDを確認するコマンド

blkidコマンド

  • ブロックデバイスの情報を表示するコマンド
  • デバイスのUUIDを確認できる
$ blkid
/dev/sda1: UUID="2d3bc8db-c107-4048-b1d6-bb1084fd2ad4" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="8504f71b-01"
/dev/sda2: UUID="mjNUGL-qPyt-azGR-CPpz-RSdW-i68A-cY8ped" TYPE="LVM2_member" PARTUUID="8504f71b-02"
/dev/mapper/rl-root: UUID="c2c92286-b6a7-45e6-9779-a1483ef16f17" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/rl-swap: UUID="95ed4f6e-f7e0-46ff-bb2e-8064d2f48613" TYPE="swap"

lsblkコマンド

  • ブロックデバイスをツリー上に一覧表示するコマンド
$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0 46.5G  0 disk
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0 45.5G  0 part
  ├─rl-root 253:0    0 41.3G  0 lvm  /
  └─rl-swap 253:1    0  4.2G  0 lvm  [SWAP]
sr0          11:0    1 1024M  0 rom
haseyuyhaseyuy

キャラクタデバイスとブロックデバイス

キャラクタデバイス

  • ひとつの文字ごとに処理するデバイス
  • キーボード、マウス、tty等

ブロックデバイス

  • データのまとまりごとに処理するデバイス
  • HDD、CD-ROM等
認識しているデバイスの一覧を表示
$ cat /proc/devices
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 21 sg
 29 fb
128 ptm
136 pts
162 raw
180 usb
188 ttyUSB
189 usb_device
202 cpu/msr
203 cpu/cpuid
226 drm
244 aux
245 hidraw
246 usbmon
247 bsg
248 watchdog
249 ptp
250 pps
251 rtc
252 dax
253 tpm
254 gpiochip

Block devices:
  8 sd
  9 md
 11 sr
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp
259 blkext