2018年9月11日 星期二

[pi-nas]raspberry pi glusterfs 換硬碟

在樹莓派上裝 gluster,硬碟壞了要換掉。查了幾種方式要來試試。但是想先試個最無腦的方法,就是 umount 舊硬碟,mount 新硬碟,看看有沒有比較方便。以下就是過程。

步驟 1
停止 gluster daemon
`sudo systemctl stop glusterfs-server`
這個只能讓 umount /mnt/gv0 成功,umount /data/brick1 還是不行
glusterfsd 還是佔著,查詢誰在用檔案或掛載 `fuser -m -u /data/brick1`。
用 `sudo /etc/init.d/glusterfs-server stop` https://gluster.readthedocs.io/en/latest/Administrator%20Guide/Start%20Stop%20Daemon/ 也不行
最後只好使用 `kill -9 PID` 處理掉,比較溫和應該用 `kill -15 PID`
umount /data/brick1 成功

步驟 2
拔掉舊的硬碟,插入新的硬碟,格式化
`sudo mkfs.xfs -i size=512 /dev/sda1`

修改 fstab `PARTUUID=c121432b-52f5-4bb2-a260-0d38992df858 /data/brick1 xfs defaults 1 2` 其中 PARTUUID 用 `blkid /dev/sda1` 查詢

`sudo mount -a`

`sudo mkdir /data/brick1/gv0`

到這,試試重開。

步驟 3
檢查 heal 狀況 `sudo gluster volume heal gv0 info`

```
pi@pi315:~ $ sudo gluster volume heal gv0 info
Brick pi314:/data/brick1/gv0
Status: Connected
Number of entries: 0
Brick pi315:/data/brick1/gv0
Status: Transport endpoint is not connected
Number of entries: -
```

看來直換是沒有,還需要下些指令。glusterfsd 3.9.0 有 reset-brick 看起來很好用,但!
我的 glusterfsd 是 3.8.8-1 沒有支援 reset-brick。
自身 replace `sudo gluster volume replace-brick gv0 pi315:/data/brick1/gv0 pi315:/data/brick1/gv0 commit force` 也不行。
所以一定要換個新名字,所以改成 gv0_1:
`sudo gluster volume replace-brick gv0 pi315:/data/brick1/gv0 pi315:/data/brick1/gv0_1 commit force`

這個時候,pi315 的 glusterfsd 才起得來

```
pi@pi314:~ $ sudo gluster volume status
Status of volume: gv0
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick pi314:/data/brick1/gv0                49153     0          Y       1492
Brick pi315:/data/brick1/gv0_1              49153     0          Y       1846
Self-heal Daemon on localhost               N/A       N/A        Y       26710
Self-heal Daemon on pi315                   N/A       N/A        Y       1851
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
```


然後,heal 就自動開始了。
查看 heal 狀態 `sudo gluster volume heal gv0 info`

到這其實就結束了,但是如果很在意那個 gv0_1 的話,我在 heal 結束之後又執行了一次 `replace-brick` 只是把 gv0_1 又換成 gv0。要考慮硬碟空間要足夠兩倍大。看硬碟閃,還是從 pi314 那裡拿資料。

參考:
## 有故意使用 setfattr 強迫 heal
https://serverfault.com/questions/710220/how-do-you-add-a-replacement-hdd-to-a-glusterfs-volume
https://lists.gluster.org/pipermail/gluster-users/2014-August/018515.html
https://docs.gluster.org/en/v3/Administrator%20Guide/Managing%20Volumes/#replace-brick

## 只使用 sudo gluster volume replace-brick 舊brick 新brick
https://sysadmins.co.za/replace-faulty-bricks-in-glusterfs/

## 使用 reset-brick
https://docs.gluster.org/en/latest/release-notes/3.9.0/

沒有留言:

張貼留言