(2014.9)
Linuxの起動時, 毎回次のように, エマージェンシーモードに入ってしまうようになった。
Welcome to emergency mode! After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" to try again to boot into default mode. Give root password for maintenance (or type Control-D to continue):
Control-D で進むと普通に起動できる状態だったが, 何やらまずそうな状況。
ディスク検査 (エラーチェック), パーティション (ディスク区画) 操作の方法を調べてみた。
エラーチェックは, PVの段階, VGの段階, ファイルシステムと進めていく。
今の Linux は, カーネル側の device-mapperと, ユーザランド側の LVM2 (Logical Volume Manager 2) というモジュールで, ディスクドライブを管理している。
Linux LVM2 では, PV (Physical Volume) - VG (Volume Group) - LV (Logical Volume) という3段階になっている。
物理ドライブのパーティション (ディスク区画) = PV (Physical Volume). パーティションを LVM の管理下に入れる。
いくつかのパーティション (=PV) を一つにまとめて VG (Volume Group) を作り, さらに VG を複数の論理ボリューム (Logical Volume; LV) に分けて, LV にファイルシステムを載せるようになっている。
LVM としては, 動的に (物理) ディスクドライブを追加したりできるようになっている。例えばディスク容量が不足している場合に, ファイルシステムが対応していれば, ファイルシステムを再フォーマットすることなく, LV を拡張することができる。
まず物理的なディスクドライブがある.
/dev/sda
, /dev/sdb
というパスで見える.
同じく, /dev/sda1
, /dev/sda2
, ... というパスで見える.
はるか昔は, パーティション = ファイルシステムだった。今でも, LVMを使わずに, パーティションにファイルシステムを載せることもできる。
私のLinuxシステムは, 物理ディスクドライブは一つだけ (/dev/sda
). fdisk コマンドでパーティションを表示してみる。
# fdisk -l /dev/sda Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00069fc1 デバイス ブート Start 最後から Blocks Id System/dev/sda1
* 2048 1026047 512000 83 Linux/dev/sda2
1026048 41943039 20458496 8e Linux LVM
/dev/sda1
は stage 2 ブートローダ. /dev/sda2
パーティションが LVM PV (Physical Volume).
fdisk -l と, ドライブを指定しない場合は、すべての物理ドライブと, /dev/mapper/
以下の LVについても表示される。LV は, 意味のある情報が表示されるわけでもなく, 微妙。
parted コマンドを使ったほうがよさそう。これは別の機械だが, 次のように, 対話式に, すべてのドライブの状況を表示できる。
# parted GNU Parted 3.2 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print list Model: ATA MB0500EBNCR (scsi) Disk /dev/sda: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 525MB 524MB primary ext4 boot 2 525MB 500GB 500GB primary lvm Model: ATA WDC WD20EARX-00P (scsi) Disk /dev/sdb: 2000GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 526MB 524MB ext4 ext4 boot, esp 3 526MB 2000GB 2000GB lvm Model: ATA WDC WD20EZRX-00D (scsi) Disk /dev/sdc: 2000GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 525MB 524MB primary ext4 boot 2 525MB 2000GB 2000GB primary lvm
Partition table が msdos の場合と gpt の場合とで, フラグなどが違うのも分かる。
quit で抜ける。
lsblk コマンドは, 物理ドライブ, パーティション, LVをツリー表示する。全体と、各LVがどの物理ドライブに載っているかを素早く知れる。
例えば, 次のようになる。この機械では, sda物理ドライブに /boot, / (root) があり, sdb, sdc で /home をミラーリングしている。
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 465.3G 0 part ├─fedora-swap 253:0 0 3.8G 0 lvm [SWAP] ├─fedora-root 253:1 0 50G 0 lvm / └─fedora-home 253:2 0 411.5G 0 lvm sdb 8:16 0 1.8T 0 disk ├─sdb1 8:17 0 1M 0 part ├─sdb2 8:18 0 500M 0 part └─sdb3 8:19 0 1.8T 0 part ├─vg_orange-lv_swap 253:3 0 2G 0 lvm ├─vg_orange-lv_home_rmeta_0 253:4 0 32M 0 lvm │ └─vg_orange-lv_home 253:8 0 1.8T 0 lvm /home ├─vg_orange-lv_home_rimage_0 253:5 0 1.8T 0 lvm │ └─vg_orange-lv_home 253:8 0 1.8T 0 lvm /home └─vg_orange-lv_root 253:9 0 50G 0 lvm sdc 8:32 0 1.8T 0 disk ├─sdc1 8:33 0 500M 0 part └─sdc2 8:34 0 1.8T 0 part ├─vg_orange-lv_home_rmeta_1 253:6 0 32M 0 lvm │ └─vg_orange-lv_home 253:8 0 1.8T 0 lvm /home └─vg_orange-lv_home_rimage_1 253:7 0 1.8T 0 lvm └─vg_orange-lv_home 253:8 0 1.8T 0 lvm /home
システムの PV (パーティションのうち LVM の管理下に入っているもの) を一覧するには pvscan コマンドを使う。私のシステムでは PVは一つだけ。
# pvscan -v Wiping cache of LVM-capable devices Wiping internal VG cache Walking through all physical volumes PV /dev/sda2 VG fedora lvm2 [19.51 GiB / 0 free] Total: 1 [19.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 0 [0 ]
それぞれのPV がどのVGに組み入れられているか, が表示される。
pvscan は表形式での表示。もう少し詳しく表示させるのは, pvdisplayコマンド。引数なしで, すべての PV が表示される。
pvs でも, 表示形式が少し違うが, 表形式で表示される。pvs --all で, すべてのパーティションのうち, どれが PVかも表示できる。
システム全体の VG (Volume Group) を一覧表示するのは vgscan コマンド。下の例では "fedora" がVG名. pvscanコマンドで VGも分かるので、蛇足。
# vgscan -v Wiping cache of LVM-capable devices Wiping internal VG cache Reading all physical volumes. This may take a while... Finding all volume groups Finding volume group "fedora" Found volume group "fedora" using metadata type lvm2
そして, LV (Logical Volume) を表示するのは lvscan コマンド。lvscanは, LV がフルパス形式で表示される。--all オプションを付けると, ミラーリングしている個別の LV も表示される。
# lvscan --all ACTIVE '/dev/fedora/swap' [2.00 GiB] inherit ACTIVE '/dev/fedora/root' [17.51 GiB] inherit
ミラーリングしている場合は, 次のように表示される。この例では, lv_home
をミラーリングしている。
# lvscan --all ACTIVE '/dev/vg_orange/lv_swap' [1.97 GiB] inherit ACTIVE '/dev/vg_orange/lv_home' [1.77 TiB] inherit ACTIVE '/dev/vg_orange/lv_root' [50.00 GiB] inherit ACTIVE '/dev/vg_orange/lv_home_rmeta_0' [32.00 MiB] inherit ACTIVE '/dev/vg_orange/lv_home_rmeta_1' [32.00 MiB] inherit ACTIVE '/dev/vg_orange/lv_home_rimage_1' [1.77 TiB] inherit ACTIVE '/dev/vg_orange/lv_home_rimage_0' [1.77 TiB] inherit ACTIVE '/dev/fedora/swap' [3.77 GiB] inherit ACTIVE '/dev/fedora/home' [411.50 GiB] inherit ACTIVE '/dev/fedora/root' [50.00 GiB] inherit
こちらも, lvdisplay コマンドで、すべての LV について詳しく表示できる。
lvsコマンドで, 表形式でも違った形の表示もできる。--all オプションも同じ。
/etc/fstab
ファイルの設定により, ここで表示されている LV のうちどれを自動マウントするかを決める。/dev/fedora/swap がスワップ領域として使われ, /dev/fedora/root が / にマウントされている。
状況が確認できたので、エラーチェックしてみる。
マウントされている状態ではエラーチェックはできない。どうするか。
GParted Live CDでブートして, エラーチェックをおこなう。
まずは PV. pvckコマンドは, PVメタデータを検査する。
# pvck -v /dev/sda2
VG. vgckコマンドは, 同じく, VGメタデータを検査する。
# vgck -v fedora
最後にファイルシステム. GParted でブートすると LVがアクティブでないので, アクティブにしてから。
# lvchange --activate y /dev/fedora/root # e2fsck -pvf /dev/fedora/root
-p | 自動修復する。 |
-v | verboseモード。 |
-f | 強制チェック。 |