Edited at

Linuxディスク関連コマンドまとめ

More than 1 year has passed since last update.


ディスク関連コマンド

情報表示:lsblk, blkid

パーティション作成:fdisk, cfdisk, gdisk, cgdisk, sgdisk, parted

マウント:mount, umount

ファイルシステム:mkfs, fsck

ファイルシステム(ext2/3/4)用: resize2fs, dumpe2fs, tune2fs

スワップ:mkswap, swapon, swapoff

SMART情報表示:smartctl

LVM:lvmdiskscan, pvdisplay, pvscan, lvdisplay, lvscan

不良セクタ対処:badblocks, ddrescue

どのディレクトリが容量を食っているか調べる:ncdu

太字のコマンドはutil-linuxに含まれており、整合性が取れていることが期待できる(と思う)。


ディスク、パーティションの情報を調べる


fdisk -l でほぼ全ての情報が分かる

MBRかGPTのどちらかは「ディスクラベルのタイプ」を見れば分かる。

どこにマウントされているかは表示されないのでmountコマンドを使う。

# fdisk -l  -o +UUID

ディスク /dev/vda: 20 GiB, 21474836480 バイト, 41943040 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 301D27AA-0BF9-4B81-9B4A-3138251A4FD7

デバイス 開始位置 最後から セクタ サイズ タイプ UUID
/dev/vda1 2048 206847 204800 100M Linux ファイルシステム 56713D43-4900-46EB-92D5-1D09C9449B11
/dev/vda2 206848 4401151 4194304 2G Linux スワップ D156FFCF-97DE-45EB-A6B0-21A9B876129A
/dev/vda3 4401152 41943006 37541855 17.9G Linux ファイルシステム C7A19722-4C31-4646-8ED4-DD4D86EFBC50

※ここで表示されるUUIDはファイルシステムのUUIDで、これとは別にディスクのUUIDというものもある(/etc/fstabの第1フィールドで指定するのはディスクUUID)。そちらはlsblk -Oまたはls -l /dev/disk/by-uuidでわかる。


lsblk

lsblk -Oで全てのカラムを表示できる。

NAME   KNAME MAJ:MIN FSTYPE MOUNTPOINT LABEL UUID                                 PARTTYPE                             PARTLABEL           PARTUUID                             PARTFLAGS  RA RO RM HOTPLUG MODEL            SERIAL   SIZE STATE   OWNER GROUP   MODE       ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO WSAME WWN RAND PKNAME HCTL       TRAN SUBSYSTEMS        REV VENDOR

sr0 sr0 11:0 128 0 1 1 QEMU DVD-ROM QM00003 1024M running root optical brw-rw---- 0 512 0 512 512 1 cfq 128 rom 0 0B 0B 0 0B 1 1:0:0:0 ata block:scsi:pci 2.0. QEMU
vda vda 254:0 128 0 0 0 20G root disk brw-rw---- 0 512 0 512 512 1 128 disk 0 0B 0B 0 0B 0 block:virtio:pci 0x1af4
├─vda1 vda1 254:1 ext4 /boot BOOT 8758e4e2-fdf4-4ef2-b364-6774a527dfcb 0fc63daf-8483-4772-8e79-3d69d8477de4 Linux filesystem 56713d43-4900-46eb-92d5-1d09c9449b11 128 0 0 0 100M root disk brw-rw---- 0 512 0 512 512 1 128 part 0 0B 0B 0 0B 0 vda block:virtio:pci
├─vda2 vda2 254:2 swap [SWAP] 89696d46-105c-437d-ab85-de8cad63608a 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f Linux swap d156ffcf-97de-45eb-a6b0-21a9b876129a 128 0 0 0 2G root disk brw-rw---- 0 512 0 512 512 1 128 part 0 0B 0B 0 0B 0 vda block:virtio:pci
├─vda3 vda3 254:3 ext4 / ROOT b6813928-7d95-4b7d-b822-09f99172e3ce 0fc63daf-8483-4772-8e79-3d69d8477de4 Linux filesystem c7a19722-4c31-4646-8ed4-dd4d86efbc50 128 0 0 0 17.9G root disk brw-rw---- 0 512 0 512 512 1 128 part 0 0B 0B 0 0B 0 vda block:virtio:pci
└─vda4 vda4 254:4 21686148-6449-6e6f-744e-656564454649 BIOS Boot Partition dffbd921-d583-4cb9-aba3-c759eb237807 128 0 0 0 1007K root disk brw-rw---- 0 512 0 512 512 1 128 part 0 0B 0B 0 0B 0 vda block:virtio:pci

-Oが使えない場合は-o +UUIDのように指定(指定可能なカラムはlsblk -hで出てくる)。


blkidというのもある

blkidはUUIDやラベルを表示したり、それらの条件で検索するものらしい。

# blkid

/dev/vda1: UUID="8758e4e2-fdf4-4ef2-b364-6774a527dfcb" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="56713d43-4900-46eb-92d5-1d09c9449b11"
/dev/vda2: UUID="89696d46-105c-437d-ab85-de8cad63608a" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="d156ffcf-97de-45eb-a6b0-21a9b876129a"
/dev/vda3: UUID="b6813928-7d95-4b7d-b822-09f99172e3ce" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="c7a19722-4c31-4646-8ed4-dd4d86efbc50"

man blkidにはblkidよりlsblkを推奨と書いてある。


It is recommended to use lsblk(8) command to get information about block devices rather than blkid. lsblk(8) provides more information, better control on output formatting and it does not require root permissions to get actual information.

(blkidよりlsblkを使うことを推奨する。lsblkの方が詳しい情報を出力するし、出力フォーマットも細かく制御できるし、実際の情報を取得するためにroot権限を必要としない)



パーティションを切る

コマンド
説明

fdisk
古来からあるコマンド。対話型。バッチ処理には不向き。util-linuxに含まれている。

cfdisk
cursesベースのfdisk。対話型。日本語表示されるし、使いやすそう。util-linuxに含まれている。

gdisk
GPT版fdisk。fdiskとは開発元が別で、util-linuxには含まれていない。

cgdisk
cursesベースのgdisk。対話型。作者はgdiskと同じRoderick W. Smith。

sgdisk
スクリプトベースのgdisk。非対話型。作者はgdiskと同じRoderick W. Smith。

parted
GNU製。

🐧 parted と gdisk で GPT ディスクのパーティショニング - 😃 mattintosh note 📝

http://mattintosh.hatenablog.com/entry/20140926/1411686000


ファイルシステム作成(mkfs)

# mkfs -t ext4 /dev/デバイス


ファイルシステムを識別するにはfile -s

# file -s /dev/vda1

/dev/vda1: Linux rev 1.0 ext4 filesystem data, UUID=8758e4e2-fdf4-4ef2-b364-6774a527dfcb, volume name "BOOT" (needs journal recovery) (extents) (huge files)


マウント


マウント

# mount /dev/デバイス /mnt/マウントポイント

またはUUIDを指定して
# mount UUID=0a5536e8-485c-43b2-XXXXXXXXXX /mnt/マウントポイント

マウントオプションを指定する
# mount /dev/デバイス /mnt/マウントポイント -o rw,relatime



  • relatimeは書き込みの時だけアクセス日時(atime)を更新する


  • noatimeは決してアクセス日時(atime)を更新しない

  • どちらもパフォーマンスを向上させるが、noatimeにするとmuttなど正常に動作しなくなるプログラムがある。

  • その他のオプションはman mountを参照


  • /etc/fstabでしか設定できないオプションもある


確認

# mount


アンマウント

# umount /mnt/マウントポイント


永続化させるには


/etc/fstab

/dev/デバイス    /mnt/マウントポイント    ext4    defaults        0   0

またはUUIDを指定して
UUID=0a5536e8-485c-43b2-XXXXXXXXXX /mnt/マウントポイント ext4 defaults 0 0



  • 5番目のフィールドはdumpコマンドの対象とするか

  • 6番目のフィールドは起動時にfsckをかける順番。0:非対象、1:ルートファイルシステム、2:その他


LVM関連

PV(Physical Volume)=物理的なディスク(またはパーティション)のこと

VG(Volume Group)=PVをまとめたもの

LV(Logical Volume)=PVの中に作った論理ディスク。LVをmountしたりmkfsしたりできる。

情報表示コマンドはlvmdiskscan, lvscan, lvdisplayなど。

Linux Hacks:LVMで楽々ディスク管理 (1/3) - ITmedia エンタープライズ

http://www.itmedia.co.jp/enterprise/articles/0709/05/news008.html


ext2/ext3/ext4用のコマンド


ext2/3/4ファイルシステムをリサイズ(resize2fs)

パーティションのサイズが変わった場合にファイルシステムをリサイズする。

Amazon Linuxの場合は起動時に自動的にresize2fsが実行されるので、手動実行しなくてもいいらしい。


ext2/3/4ファイルシステムに関する情報を表示(dumpe2fs)

ext2/3/4の場合はdumpe2fs /dev/デバイス


  • 最後にマウントしたディレクトリ

をはじめ、詳細な情報が取得できる。

ただしここで表示される使用済みinode数などはリアルタイムなデータではなく、アンマウントしている状態でしか正しくない。それを知るにはdf -iを使う方がよい。

dfで全ての情報を取得するには:

# df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target

ファイルシス タイプ Iノード I使用 I残り I使用% 1K-ブロック 使用 残り 使用% File マウント位置
dev devtmpfs 62541 314 62227 1% 250164 0 250164 0% - /dev
run tmpfs 63215 367 62848 1% 252860 380 252480 1% - /run
/dev/vda3 ext4 1175040 377317 797723 33% 18344808 10084412 7305468 58% - /
tmpfs tmpfs 63215 1 63214 1% 252860 0 252860 0% - /dev/shm
tmpfs tmpfs 63215 11 63204 1% 252860 0 252860 0% - /sys/fs/cgroup
tmpfs tmpfs 63215 19 63196 1% 252860 12 252848 1% - /tmp
/dev/vda1 ext4 25688 367 25321 2% 95054 48031 39855 55% - /boot
tmpfs tmpfs 63215 5 63210 1% 50572 0 50572 0% - /run/user/0
tmpfs tmpfs 63215 1 63214 1% 30720 0 30720 0% - /mnt/tmpfs


予備領域のサイズを減らして空き容量を絞りだす(tune2fs)

万一のときのための予備領域(デフォルトでは5%らしいがAmazon Linuxでは違うようだ)

まず現状を確認

# tune2fs -l /dev/xvda1 | grep Reserved

Reserved block count: 94351

予備領域を 1% に設定する。

# tune2fs -m 1 /dev/xvda1

tune2fs 1.42.12 (29-Aug-2014)
Setting reserved blocks percentage to 1% (23587 blocks)


スワップ

スワップファイル作成。ddよりfallocateを使う方が速い。

512MBのスワップファイルを作成する

# fallocate -l 512M /swapfile

スワップ領域作成

デバイスをスワップ領域にする場合:

# mkswap /dev/デバイス
スワップファイルを使う場合:
# mkswap /swapfile

スワップセット(--verboseは省略可)

# swapon --verbose /dev/デバイス

スワップ確認

# swapon -s

スワップ解除(--verboseは省略可)

# swapoff --verbose /dev/デバイス


ディスク丸ごとコピー


ddrescue

dd は破損ブロックの処理がうまくない。破損ブロックがなければいいが、あるときは ddrescue を使った方がよい。

https://ja.wikipedia.org/wiki/Ddrescue