ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2020年2月8日土曜日

Raspberry Pi が起動しなくなった

Web サーバとして起動していた Raspberry Pi が落ちて起動しなくなった・・・

もともと、外付け HDD でやっていたが夏場の熱でちょくちょく落ちるので
SD カードのみで起動していたのだが・・・

SSH で通信できなくなったので 電源抜いて強制再起動。
でも立ち上がらない。
画面をみると

ERROR: Bailing out. Run 'fsck /dev/mmcblk0p2' manually

エラーが出てる・・・
fsck を実行するも

[rootfs ]# fsck /dev/mmcblk0p2 

snip ...

WARNING: Filesystem still has errors

復活せず・・・

データだけでも救出しようと、SD カードを取り出し、VM 上の Linux に接続。
マウントしてみるも

[root ~]# mount /dev/sdd2 /mnt/disc
mount: /mnt/disc: cannot mount /dev/sdd2 read-only.

書き込みでマウントしているにも関わらずリードオンリーでのマウントに失敗・・・
fdisk で修復にかかるも

[root ~]# fdisk /dev/sdd2

snip ...

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

fdisk: cannot open /dev/sdd2: Read-only file system

同じ結果・・・
hdparm でリードオンリーを解除してみる

[root ~]# hdparm -r0 /dev/sdd
/dev/sdd:
 setting readonly to 0 (off)
 readonly      =  0 (off)

いけたかと思い再マウントするも

[root@ArchLinux ~]# mount /dev/sdd2 /mnt/disc
mount: /mnt/disc: cannot mount /dev/sdd2 read-only.

変わらず・・・
下記サイトを見つけたので参考にして

https://qiita.com/_takeuchi_/items/e285f82383a1c70a7262

dd でデータ抽出、マウント

[root ~]# dd if=/dev/sdd2 of=./sdd2.img
[root ~]# mount -o loop ./sdd2.img /mnt/disc

データ救出できました。
ログの書き込み等が多い状態での SD カード運用は無理があるようです・・・

2013年11月9日土曜日

ArchLinux の open-vm-tools を使用して VMware Player の hgfs による共有設定

CentOS をゲスト OS にする場合、よく VMware Player の共有を行うので、ArchLinux でもやろうとして嵌った・・・

とりあえず、公式 Wiki  を参考に開始した。

まず、ArchLinux の場合、vmware-tools でなく open-vm-tools を使用するようなので、インストール。

# pacman -S open-vm-tools

  • /etc/systemd/system/mnt-hgfs.mount
  • /etc/systemd/system/mnt-hgfs.automount
をコピペで作成。

/mnt/hgfs を作成。
# mkdir -p /mnt/hgfs

起動設定後再起動。
# systemctl enable mnt-hgfs.automount
# shutdown -r now 

確認してみると、エラー・・・
# ls /mnt/hgfs
ls: cannot access /mnt/hgfs/: No such device

マウントを確認。
# mount
[snip]
systemd-1 on /mnt/hgfs type autofs (rw,relatime,fd=26,pgrp=1,timeout=300,minproto=5,maxproto=5,direct
autofs になっている。

サイトをよく読むと、
共有フォルダを動かすには vmhgfs ドライバがロードされていなければなりません。
とのこと。
# lsmod | grep vmhgfs
存在しない・・・

サイトの上のほうに、open-vm-tools-modules に vmhgfs が含まれている記述があった。
よく読むべきだ・・・

探してみると
# pacman -Ss open-vm-tools-modules
community/open-vm-tools-dkms 5:2013.09.16-3
    kernel modules for the open source implementation of VMware Tools
名前が違うものが表示されるが・・・
とりあえずインストール。
# pacman -S open-vm-tools-dkms
[snip]
>>> Enable building of open-vm-tools modules:
>>> $ dkms add open-vm-tools/2013.09.16
>>>
>>> Enabling vmxnet driver in /usr/lib/modprobe.d/open-vm-tools-modules.conf
>>> (this will disable pcnet32 driver)
>>>
>>> If vmxnet driver doesn't handle your NIC, you have to manually
>>> disable loading of pcnet32 driver
>>>

表示されたコマンドを叩いてみる。
# dkms add open-vm-tools/2013.09.16
make: *** vmxnet: No such file or directory.  Stop.
make: *** vsock: No such file or directory.  Stop.

Creating symlink /var/lib/dkms/open-vm-tools/2013.09.16/source ->
                 /usr/src/open-vm-tools-2013.09.16

DKMS: add completed.

ソースにシンボリックリンクが貼られただけ?
まさかと思い、とりあえず再起動してみる。
# shutdown -r now
確認。
# ls /mnt/hgfs
ls: cannot access /mnt/hgfs/: No such device
# mount
[snip]
systemd-1 on /mnt/hgfs type autofs (rw,relatime,fd=26,pgrp=1,timeout=300,minproto=5,maxproto=5,direct
# lsmod | grep vmhgfs
# find / -name '*vmhgfs*'
/usr/bin/mount.vmhgfs
/usr/src/open-vm-tools-2013.09.16/vmhgfs
/usr/src/open-vm-tools-2013.09.16/vmhgfs/vmhgfs_version.h
・・・ 
ドライバのインストールなんぞめったにやらんしどうすんだ・・・とりあえずコンパイルするか・・・
# cd /usr/src/open-vm-tools-2013.09.16/vmhgfs/
# make
Using standalone build system.
Makefile:146: Makefile.normal: No such file or directory
make: *** No rule to make target 'Makefile.normal'.  Stop.
エラー箇所の Makefile を見てみると、Makefile.kernel と Makefile.normal を読み込み分けているっぽい。
Makefile.kernel は存在するので、VM_KBUILD を設定。
# make VM_KBUILD=yes
Using kernel build system.
make -C /lib/modules/3.11.6-1-ARCH/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= modules
make[1]: *** /lib/modules/3.11.6-1-ARCH/build/include/..: No such file or directory.  Stop.
Makefile:120: recipe for target 'vmhgfs.ko' failed
make: *** [vmhgfs.ko] Error 2
カーネルヘッダーがなさそうなのでインストールして再度コンパイル。
# pacman -S linux-headers
# make VM_KBUILD=yes
[snip]
/usr/src/open-vm-tools-2013.09.16/vmhgfs/inode.c: In function ‘HgfsPermission’:
/usr/src/open-vm-tools-2013.09.16/vmhgfs/inode.c:1893:29: error: ‘struct dentry’ has no member named ‘d_count’
          int dcount = dentry->d_count;
                             ^
scripts/Makefile.build:308: recipe for target '/usr/src/open-vm-tools-2013.09.16/vmhgfs/inode.o' failed
make[2]: *** [/usr/src/open-vm-tools-2013.09.16/vmhgfs/inode.o] Error 1
Makefile:1225: recipe for target '_module_/usr/src/open-vm-tools-2013.09.16/vmhgfs' failed
make[1]: *** [_module_/usr/src/open-vm-tools-2013.09.16/vmhgfs] Error 2
make[1]: Leaving directory '/usr/src/linux-3.11.6-1-ARCH'
Makefile:120: recipe for target 'vmhgfs.ko' failed
make: *** [vmhgfs.ko] Error 2
ググってみるとパッチがあるようで、
# curl https://raw.github.com/rasa/vmware-tools-patches/master/patches/vmhgfs/vmhgfs-d_count-kernel-3.11-tools-9.6.0.patch | patch -p1
[snip]
patching file inode.c
# make VM_KBUILD=yes
[snip]
make[1]: Entering directory '/usr/src/open-vm-tools-2013.09.16/vmhgfs'
make[1]: 'postbuild' is up to date.
make[1]: Leaving directory '/usr/src/open-vm-tools-2013.09.16/vmhgfs'
cp -f vmhgfs.ko ./../vmhgfs.o
成功したようだ。
insmod とか modprobe だったよなと思い調べつつ適当に進めていく。
とりあえず、モジュールをコピー。
# cd /usr/lib/modules/3.11.6-1-ARCH/kernel/fs
# mkdir vmhgfs
# cat /usr/src/open-vm-tools-2013.09.16/vmhgfs/vmhgfs.ko | gzip > vmhgfs/vmhgfs.ko.gz
modules.dep に追記。
# cd ../../
echo kernel/fs/vmhgfs/vmhgfs.ko.gz: >> modules.dep
modules.dep.bin 再生成後読み込み
# depmod -a
# modprobe vmhgfs
起動時に読み込むように /etc/modules-load.d/open-vm-tools.conf 作成
# echo vmhgfs >> /etc/modules-load.d/open-vm-tools.conf

これで、/mnt/hgfs の下にマウントされた共有ディレクトリがみれるようになった。
が、ファイルを置いてみたりしているとファイルによっては途中までしか読み込まない・・・
使えないんだろうか・・・ 

2012年2月12日日曜日

Pacemaker で仮想 IP の切り替え

Pacemaker でまず仮想 IP の切り替えを行う時に嵌まったこと。

OS は CentOS 5.7 でやってみる。インストールは、LINUX-HA JAPAN より、ローカルリポジトリ + yum を使用。

クラスタ制御部には、Corosync を使用することにする。
/etc/corosync/corosync.conf を作成。
# Please read the corosync.conf.5 manual page
compatibility: whitetank

aisexec {
        user: root
        group: root
}

service {
    name: pacemaker
    ver: 0
    use_mgmtd: yes
}

totem {
    version: 2
    secauth: off
    threads: 0
    rrp_mode: active
    clear_node_high_bit: yes
    token: 4000
    consensus: 10000
    rrp_problem_count_timeout: 3000
    interface {
        ringnumber: 0
        bindnetaddr: 192.168.234.0
        mcastaddr: 226.94.1.1
        mcastport: 5405
        ttl: 1
    }
}

logging {
    fileline: on
    to_stderr: no
    to_logfile: yes
    to_syslog: no
    logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: on
}
bindnetaddr にはインターフェースの IP でなくネットワークアドレスを指定する。
ログをファイルに出力するように指定。

/etc/init.d/corosync start で起動して、crm_mon を実行して確認する。
Attempting connection to the cluster.........................
帰ってこない・・・

一般ユーザで実行したからっぽい。グループに、haclient を追加したら帰ってきた。
============
Last updated: Sun Feb 12 00:54:09 2012
Stack: openais
Current DC: localhost.localdomain - partition WITHOUT quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
1 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ localhost.localdomain ]

次に、 crm configure help でコマンドを確認しようとするも、
cibadmin not available, check your installation
となる、sudo でやってもダメだった。仕方ないので root になって行う。
# crm configure property no-quorum-policy="ignore" stonith-enabled="false"
# crm configure rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"
# crm configure primitive vip ocf:heartbeat:IPaddr2 \
params ip="192.168.234.51" nic="eth0" cidr_netmask="24" op monitor interval="10s"
eth0 に 192.168.234.51 の仮想 IP を作成する設定。

ifconfig で確認するも設定したアドレスが見当たらない。
eth0 にはそもそも実インターフェースの IP が割当たっているからだ。
ip addr show eth0 で確認できる。
inet 192.168.234.51/24 brd 192.168.234.255 scope global secondary eth0

最初、CentOS 6 を使用して普通に yum でインストールして開始したわけだが、こっちのほうが嵌まった。
Pacemaker が 1.1 になっており、クラスタ部に heartbeat が使えなかったり、corosync.conf の service の ver を 1 にしないとだったり、vip 指定時に nic に eth0:1 などを指定すると警告が出たりとかなり面倒だった。

結局、CentOS5.7 を使うことになり、落としたわけだが・・・