2015年09月02日(水) [長年日記]
■ [unix] LVMについて調べた
CentOS 7にディスクを増設したい。そのためにはLVM (logical volume manager)を理解しておいた方がよさそうなので調べる。
ざっくり言うと、LVMは複数の物理ディスクを束ねて1つの大きな論理的なディスクとして扱うための仕組みと考えてよさそう。
マニュアル
RHEL 6のマニュアルが日本語化されていた。
論理ボリューム、ボリュームグループ、物理ボリューム
LVMは
- 論理ボリューム (LV)
- ボリュームグループ (VG)
- 物理ボリューム (PV)
の3つを押さえておけば大丈夫そう。次のようになっているみたい。
ファイルシステム ファイルシステム ファイルシステム | | | +-------+--------+ +--------+-------+ +--------+-------+ | 論理ボリューム | | 論理ボリューム | | 論理ボリューム | +--------------+-+ +-+--------------+ +--------+-------+ | | | +----------+-----+---+ +----------------+---+ | ボリュームグループ | | ボリュームグループ | +----+---------------+ +---+-----+----------+ | | | +--------+-------+ +--------------+-+ +-+--------------+ | 物理ボリューム | | 物理ボリューム | | 物理ボリューム | +--------+-------+ +--------+-------+ +--------+-------+ | | | 物理ディスク パーティション パーティション
- 物理ボリュームは1つの物理ディスク或いは物理ディスク上の1つのパーティション。
- ボリュームグループは複数の物理ボリュームを束ねたもの。
- 論理ボリュームはボリュームグループを分割したもの。論理ボリューム上にファイルシステムを作ることができる。
管理コマンド
LVMを扱うためのコマンドは色々あって難しい。ひとまずはlvmコマンドを実行するとプロンプトが出るので、その上で操作するのが分かりやすそう。
% sudo lvm lvm> help Available lvm commands: Use 'lvm help <command>' for more information devtypes Display recognised built-in block device types dumpconfig Dump configuration ...
CentOS 7上にあるボリューム
自分のマシン上にどのようなボリュームがあるのか見てみる。
物理ボリューム
lvm> pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 31.51g 0
/dev/sda2 という物理ボリュームがあって、それがcentosというボリュームグループに属している。/dev/sda2というのは1番目の物理ディスクの2番目のパーティションを表すデバイスファイルのパスであり、それがそのまま物理ボリュームの名前になるみたい。
ボリュームグループ
lvm> vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 31.51g 0
centosという名前のボリュームグループがある。物理ボリューム1つから成り、論理ボリュームが2つありそう。
論理ボリューム
lvm> lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 28.31g swap centos -wi-ao---- 3.20g lvm> lvscan ACTIVE '/dev/centos/swap' [3.20 GiB] inherit ACTIVE '/dev/centos/root' [28.31 GiB] inherit
rootとswapという2つの論理ボリュームがありそれぞれが /dev/centos/ 配下にマッピングされている。
ファイルシステムとの関係
% df -T ファイルシス タイプ 1K-ブロック 使用 使用可 使用% マウント位置 /dev/mapper/centos-root xfs 29669220 19136296 10532924 65% / devtmpfs devtmpfs 1663152 0 1663152 0% /dev tmpfs tmpfs 1672348 0 1672348 0% /dev/shm tmpfs tmpfs 1672348 8488 1663860 1% /run tmpfs tmpfs 1672348 0 1672348 0% /sys/fs/cgroup /dev/sda1 xfs 508588 278360 230228 55% /boot
dfコマンドで論理ボリューム(/dev/centos/root)が見えるかと思いきや見えない。が、
% ls -l /dev/centos /dev/mapper /dev/centos: 合計 0 lrwxrwxrwx. 1 root root 7 9月 2 14:41 root -> ../dm-1 lrwxrwxrwx. 1 root root 7 9月 2 14:41 swap -> ../dm-0 /dev/mapper: 合計 0 lrwxrwxrwx. 1 root root 7 9月 2 14:41 centos-root -> ../dm-1 lrwxrwxrwx. 1 root root 7 9月 2 14:41 centos-swap -> ../dm-0 crw-------. 1 root root 10, 236 9月 2 14:41 control
/dev/centos/root と /dev/mapper/centos-root はちゃんと同じものを指しており同一視してよさそう。何故こうしているのかは謎。
/dev/centos/swapの方は/proc/swapsを見ると確認できる。
% cat /proc/swaps Filename Type Size Used Priority /dev/dm-0 partition 3354620 0 -1
/dev/centos/swapは/dev/dm-0を指しているから同じもの。
2015年09月03日(木) [長年日記]
■ [unix][hard][howto] CentOS 7でディスク増設
昨日の続き。VirtualBox上のCentOS 7にディスクを追加したのでメモ。
ディスクの接続
VirtualBox上でのディスク追加はGUIから簡単にできる。SATAコントローラに対しデフォルトのVDI形式でドライブイメージを追加した。
/devを確認
SATAで繋がったディスクは /dev/sd* というファイルとして見えるらしいので確認。
% ls -l /dev/sd* brw-rw----. 1 root disk 8, 0 9月 2 14:41 /dev/sda brw-rw----. 1 root disk 8, 1 9月 2 14:41 /dev/sda1 brw-rw----. 1 root disk 8, 2 9月 2 14:41 /dev/sda2 brw-rw----. 1 root disk 8, 16 9月 2 14:41 /dev/sdb
sdaが元からあったディスクでsdbが今回増設したディスクだ。sda1はsdaの1つ目のパーティション、sda2は2つ目のパーティションを表しているみたい。sdbにはパーティションが無い。
増設したディスクを物理ボリュームとして登録
最終的には増設したディスクを既存の論理ボリューム /dev/centos/root に追加したい。そのためにまず物理ボリュームを登録する。
物理ボリュームの登録にはpvcreateコマンドを使う。lvmコマンドのプロンプト内でも実行できる。
lvm> pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created lvm> pvscan PV /dev/sda2 VG centos lvm2 [31.51 GiB / 0 free] PV /dev/sdb lvm2 [40.82 GiB] Total: 2 [72.33 GiB] / in use: 1 [31.51 GiB] / in no VG: 1 [40.82 GiB]
登録できたようだ。
物理ボリュームをボリュームグループに追加
次は登録した物理ボリューム /dev/sdb を既存のボリュームグループcentosに追加する。使うコマンドはvgextend。
lvm> vgextend centos /dev/sdb Volume group "centos" successfully extended lvm> vgs VG #PV #LV #SN Attr VSize VFree centos 2 2 0 wz--n- 72.32g 40.82g
昨日のvgsの出力結果と比べるとPVとVSizeとVFreeが増えている。
論理ボリュームの拡張
ボリュームグループが大きくなったので、その増えた分を既存の論理ボリューム /dev/centos/root に追加する。使うコマンドはlvextend。
lvm> lvextend -l +100%FREE /dev/centos/root Size of logical volume centos/root changed from 28.31 GiB (7247 extents) to 69.12 GiB (17696 extents). Logical volume root successfully resized lvm> lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 69.12g swap centos -wi-ao---- 3.20g lvm> vgs VG #PV #LV #SN Attr VSize VFree centos 2 2 0 wz--n- 72.32g 0
lvextendで/dev/centos/rootが属するボリュームグループの空き領域全てを同論理ボリュームに追加している。論理ボリュームのサイズが増え、ボリュームグループの空き領域が無くなったことが確認できた。
ファイルシステムサイズの拡張
目的としていた論理ボリュームへのディスク追加はできた。が、これだけだと追加した領域をファイルシステムから使えない。ファイルシステムのサイズを拡張する必要があるみたい。
論理ボリューム /dev/centos/root 上のファイルシステムはXFSなので、XFSのサイズ拡張コマンドxfs_growfsを実行する。
% sudo xfs_growfs /dev/mapper/centos-root meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=1855232 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=7420928, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=3623, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 7420928 to 18120704 % df -T ファイルシス タイプ 1K-ブロック 使用 使用可 使用% マウント位置 /dev/mapper/centos-root xfs 72468324 19137568 53330756 27% / devtmpfs devtmpfs 1663152 0 1663152 0% /dev tmpfs tmpfs 1672348 0 1672348 0% /dev/shm tmpfs tmpfs 1672348 8488 1663860 1% /run tmpfs tmpfs 1672348 0 1672348 0% /sys/fs/cgroup /dev/sda1 xfs 508588 278360 230228 55% /boot
うまくいったようだ。
■ [howto][web][soft] Apache 2.4でsuexecを無効にする
CGIを動かしたくて久しぶりにApache 2.4をインストールしてみた。案の定なかなかCGIスクリプトが動くようにならなかった。
まずはSELinuxのチェックに引っかかっていたので、意識を低くSELinuxを無効にした。しかしまだ動かない。Apacheのerror_logファイルには「End of script output before headers」というエラーが出るだけ。
結構悩んだ後、/var/log/secure にsuexecが「command not in docroot」というエラーを出力していることに気付いた。suexecってなんだっけ、Apacheに付属しているプログラムなのか。
suexecを調べると、コンパイルし直さないと設定変更ができないらしい。それはひどい。suexecはApacheのパッケージからインストールされているのでコンパイルし直しはできない。仕方ないのでこれもオフにしようとしたが、マニュアルには「suEXEC を無効にする場合は、suexec ファイルを削除してから Apache を kill して再起動します。」という説明しかなかった。これもひどい。
が、設定項目の一覧を見たらちゃんとSuexec Directiveという項目があった。httpd.confに
Suexec Off
という行を追加してhttpdを再起動したらsuexecがオフになり、CGIスクリプトが動くようになった。
2015年09月11日(金) [長年日記]
■ [android][howto] Android Studioで「Structure」ツールウィンドウが機能しなかった
Android Studioを使い始めた。バージョンは1.3.2。
次の機能の動きがおかしくて困っていた。
- ツールウィンドウの「Structure」に何も表示されない。これは困る。
- ツールウィンドウの「Project」の設定の「ソースに自動スクロール」「ソースから自動スクロール」が機能しない。
原因は、非公式の日本語リソース(resources_jp.jar)を使っていることだった。このファイルを削除したらどちらの機能も正しく動くようになった。
参考
■ [hard][android][howto] Nexus 5でUSBデバッグができなかった
「USBデバッグ」を有効にしたNexus 5をPCにUSB接続したとき、PC側で adb devices を実行してもNexus 5が認識されず困った。
Nexus 5上には「USBデバッグが接続されました」という通知が表示されているのになあ。この通知には
メディアデバイスとして接続
他のUSBオプションをタップしてください
というメッセージもくっついている。文章の意味が分からない。これをタップすると「USBでパソコンに接続」という設定画面が表示される。ここで「メディアデバイス(MTP)」がチェックされていたので、このチェックを外すと
USBデバッグを許可しますか?
というダイアログが表示された。許可することにより、adb devicesでNexus 5が表示されるようになった。
「USBでパソコンに接続」画面は設定画面から到達するのが難しいのでそれもメモ。
- [設定] → [ストレージ] → メニューをタップ → [USBでパソコンに接続]
● クリィミィ [とても参考になりました。ありがとうございます。]