Linux起動時にLDAPサーバ問い合わせ失敗を繰り返す件

libnss-ldapを設定すると、Linux起動時に以下のようなメッセージが出力されることがある。

udevd[]: nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
udevd[]: nss_ldap: failed to bind to LDAP server ldaps://LDAPSERVER.HERE: Can't contact LDAP server
udevd[]: nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
udevd[]: nss_ldap: failed to bind to LDAP server ldaps://LDAPSERVER.HERE: Can't contact LDAP server
udevd[]: nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
udevd[]: nss_ldap: failed to bind to LDAP server ldaps://LDAPSERVER.HERE: Can't contact LDAP server
udevd[]: nss_ldap: reconnecting to LDAP server (sleeping 4 seconds)

これはLDAPサーバに接続しにいってるんだけど、NICが有効になっていないために接続できず、リトライを繰り返しているという状態。
で、そもそもなんで接続しにいってるかというと、/etc/udev/rules.d/91-permissions.rulesの記述に従ってユーザおよびグループを探すため。
通常LDAPを利用する場合、/etc/nsswitch.confでpasswdとgroupは以下のような感じになってると思う。

passwd:         compat ldap
group:          compat ldap

で、udevがユーザやグループを捜しにまず/etc/passwdやら/etc/groupをみるんだけども、見つからなかったらldapに問い合わせにいくわけで、上記の問題が発生する。
ということで、/etc/passwdやら/etc/groupでそれらが見つかればいい。
ということで以下を打ち込めばOK。

addgroup --system nvram
addgroup --system rdma
addgroup --system fuse
addgroup --system kvm
addgroup --system scanner
adduser --system --group --shell /usr/sbin/nologin --home /var/lib/tpm tss

ちなみにldapの方を先に参照するように設定していたりする場合は、udevdの起動よりも先にネットワークを起動しないとだめだろう。

ファイルサーバのHDD交換

ファイルサーバのHDDが一本いってたので、lvreduceやらvgremoveやらpvremoveやらを使って引っこ抜いて修理に出してたのがようやく届いた。
修理っていっても当然ながら交換対応だけど。

ということでLVMでHDDを引っこ抜いたり追加したりするやり方をメモしておく。
というかLVMおさらいってことで簡単に全体メモっておく。

LVMはPV(物理ボリューム)を一つないし複数用いてVG(ボリュームグループ)を作成し、VGを仮想的な一つのディスクとして取り扱い、LV(論理ボリューム)をパーティションのごとく扱う。
一つのPVは一のディスクあるいは一パーティションで対応する。

ということで、pvcreateしてvgcreateしてlvcreateすればLVMで運用できる。

LVMで扱っているPVの一つがやばくなったりした場合はそれを引っこ抜かなくてはならない。
今回みたいにHDDが死にかけた場合とか。
その場合、手順は以下のようになる。

  1. 引っこ抜きたいHDDの容量分の空き容量を作る
  2. 引っこ抜きたいHDD上にあるデータをほかのHDDにうつす
  3. 引っこ抜く

まず、空き容量の作成だが、たとえばLVMで1.5T*3で構成していて、1Tと3.5TのLVを作っていて、HDDのうち一本が死にそうな場合。
データで埋まっている場合は削除するなりなんなりしてまずあける。
そして、次に、ファイルシステムを縮小する。
この場合は1.5Tの削減が必要。
1Tと3.5Tの両方あわせて合計1.5T削減できればいい。
ファイルシステムの縮小はext3の場合はfsckしてからresize2fsする。
アンマウントは事前にしておく。

# e2fsck -yfv /dev/fileserver/fileserver
# resize2fs -f /dev/fileserver/fileserver 1500G

ファイルシステムの縮小が終わったら、次にLVの縮小を行う。

# lvreduce -L -1.5T /dev/fileserver/fileserver

死にかけのディスク上にあるデータをほかのディスクに移す。

# pvmove /dev/sde1
 PV Name               /dev/sde1
 PV UUID               3Hgl3d-0EO6-QOXa-NnrX-2h8X-1fk8-c4b7AL
 PV Status             allocatable
 Total PE / Free PE    357699 / 357699

Total PE / Free PEが等しくなったら移し残しはない状況だ。
あとはVGから切り離してPVを削除する。

# vgreduce fileserver /dev/sde1
# pvremove /dev/sde1

これで完全にLVMからHDDが切り離された状態になった。
ということで修理持ち込みして帰ってくるのを待つと。

で、帰ってきた。
取り付ける。
LVMへの追加の方は既存のデータ移行などを気にしないでいいので楽だ。

PVを作成してVGへ追加して拡張したいLVを拡張するなり新規のLVを作るなり。

# fdisk /dev/sde
(sde1をLVMパーティションとして作成)
# pvcreate /dev/sde1
# vgextend fileserver /dev/sde1
# lvextend -L +1.5T /dev/fileserver/fileserver

LVを拡張した場合は最後にファイルシステムの拡張を行う。

# resize2fs /dev/fileserver/fileserver

これにて完了。

-L -1.5T /dev/fileserver/fileserver