2019/11/26

file descriptor redirection 與 process substitution


是這樣的這邊有個需求想要把 stdout 與 stderr 分別導向至不同的檔案中

這個很簡單

透過 bash 中 > 即可達成

再來 stdout 的 fd 是 1, 而 stderr 的 fd 是 2

組合起來就是

```
command 1> out.log 2> err.log
```

而預設導向的 fd 是 1

於是乎又可以寫成

```
command > out.log 2> err.log
```

接下來變化來了

需求是:
除了把 stdout 與 stderr 分別導向至不同的檔案中, 也要將 stdout 與 stderr 導入至同一個檔案, 並且印出順序要一致

這就會需要用到 process substitution

```
>(list)
# 或
<(list)
```

指令 list 會以非同步方式執行

加上利用 tee 同時導入至檔案與印在螢幕上

組合技如下:

```
command > >(tee stdout.log >> all.log) 2> >(tee stderr.log >> all.log)
```

2019/10/22

修改 root logic volume 注意事項


一班我們如果要重新命名 lv 只要

```
$ lvrename
```

就可以了

但是如果要重新命名 root 也就是啟動系統那顆的話就要小心了

如果缺了步驟, 很有可能你的系統就開不了機了


除了使用 lvrename 去改名外, 還必須執行三個步驟

1. 將 /boot/grub/grub.cfg 下所有相關路徑都改正確

2. 執行 update-grub2 去重新產生開機設定
```
$ update-grub2
```

3. 修改 fstab 路徑

2019/10/04

備份樹莓派 microSD 卡


最近在樹莓派上面跑 docker 但常常每幾個星期就會出現 kernel 或是 library 毀損的訊息

導致如果重開機後 docker service 就無法正常啟動 實在是很困擾我

所以就想說有沒有辦法備份整個安裝好的SD卡 毀損時直接還原就好

2019/08/01

自製紗窗


我有個大膽的想法! 自製紗窗

其實是因為陽台要裝瓦斯烘衣機, 原先裝上的鋁窗因為安全問題所以把它拆了下來

但這樣就等於沒有紗窗了, 很容易會有蚊子, 所以決定自己手工做一組!!

Honeywell HPA-720WTW 開箱


雖然本身不太會過敏, 但是一直以來都很想嘗試用用看空氣清淨機

剛好家裡剛裝潢好, 木工粉塵飛揚與怕櫃子貼皮用的膠水會釋放出甲醛

趁機就開始準備想要入手的空氣清淨機牌子與型號

想到前同事買了 Honeywell, 所以就注意在 HPA-100APTW, HPA-200APTW, HPA-710WTW, HPA-720WTW 這四台上面做參考

當然去特X屋的時候, 也有被推薦 Dyson 的 TP-04 與 HP-04, 但使用情境與價格的因素, 這次就先不考慮囉

做功課做了許久, 在考慮了適用坪數與外型, 最後是決定買 HPA-720WTW

近期可能是因為有新產品要發表了, 所以我最終入手價比原價 18900 或折扣價 17900 還便宜很多!!

2019/03/22

如何修改 visudo 的預設編輯器



由於 ubuntu 預設 visudo 的編輯器是 nano

對於習慣使用 vim 來編輯的使用者來說根本像是天書一樣, 完全不會用

要怎麼修改預設的編輯器呢

如下:

```
$ sudo update-alternatives --config editor
```

```
There are 4 choices for the alternative editor (providing /usr/bin/editor).

Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 15 manual mode

Press to keep the current choice[*], or type selection number:
```

輸入 3 就會是 vim 了

設定 Ubuntu 18 的 hostname



在 Ubuntu 18 中, 設定 hostname 不像是以前可以直接下 hostname 指令

而是要利用 hostnamectl 去做設定, 如下

```
$ sudo hostnamectl set-hostname new-name
```

2019/03/14

LVM 增加新硬碟以增加容量


最近在幹大事, 之前掛載硬碟一下子就不夠用了

幸好當初是用 LVM 方式創建的

所以只要加入一顆硬碟並且加入到 Volume Group 就可以增加空間了

步驟如下:

原先可用空間剩下 9%

```shell

$ df
/dev/mapper/VG1-DATA 308583232 266262416 26576000 91% /data
```

看一下有哪些 Physical Volume

```shell

$ sudo lvmdiskscan -l
WARNING: only considering LVM devices
/dev/sda3 [ <19.00 GiB] LVM physical volume
/dev/sdb [ 300.00 GiB] LVM physical volume
1 LVM physical volume whole disks
1 LVM physical volume
```

在新硬碟建立 PV

```shell

$ sudo pvcreate /dev/sdc
```

看看是否建成功

```shell

$ sudo lvmdiskscan -l
WARNING: only considering LVM devices
/dev/sda3 [ <19.00 GiB] LVM physical volume
/dev/sdb [ 300.00 GiB] LVM physical volume
/dev/sdc [ 300.00 GiB] LVM physical volume
2 LVM physical volume whole disks
1 LVM physical volume

```

很好, /dev/sdc 也變成 PV 了

接下來把 /dev/sdc 加入到 Volume Group 中

```shell

# 要加入的 Volume Group 名稱為 VG1
$ sudo vgextend VG1 /dev/sdc
```

把 Logic Volume 延伸 (步驟同 增大 Ubuntu 18.04 上 root lvm volume )

```shell

# 延伸 LV
$ sudo lvextend -l +100%FREE /dev/VG1/DATA

# 調整 ext4 大小
$ sudo resize2fs -p /dev/mapper/VG1-DATA
```

可用空間變成 54% 了

```shell

$ df
/dev/mapper/VG1-DATA 618214560 266267944 323619528 46% /data
```

可以繼續幹大事了

從 -flat.vmdk 還原為 .vmdk

由於一時手殘, 不小心把 VM 的檔案全刪了, 幸好 VM 是開啟的狀態, 所以 -flat.vmdk 沒有被刪除

那麼該怎麼還原呢

首先先查看你的 -flat.vmdk 檔案

```
$ ls -al
-rw------- 1 root root 322122547200 Mar 14 05:37 vm-1-flat.vmdk
-rw------- 1 root root 21474836480 Mar 14 05:37 vm-flat.vmdk
```

只剩下兩個 -flat.vmdk

先記下來 這兩個檔案的大小 322122547200 跟 21474836480

實際上還原的指令是:

```
$ vmkfstools -c 322122547200 -a pvscsi -d thin restore-1.vmdk
$ vmkfstools -c 21474836480 -a pvscsi -d thin restore.vmdk
```

其中 -a 的參數是你創建的 SCSI Controller

我是 VMware Paravirtual 則填 pvscsi
也有可能是 LSI Logic 則填 lsilogic

vmkfstools 指令執行完後會產生四個新檔案 ls 看一下

```
-rw------- 1 root root 322122547200 Mar 14 05:37 vm-1-flat.vmdk
-rw------- 1 root root 21474836480 Mar 14 05:37 vm-flat.vmdk
-rw------- 1 root root 322122547200 Mar 14 05:37 restore-1-flat.vmdk
-rw------- 1 root root 21474836480 Mar 14 05:37 restore-flat.vmdk
-rw------- 1 root root 478 Mar 14 05:37 restore-1.vmdk
-rw------- 1 root root 528 Mar 14 05:37 restore.vmdk
```

接下來重點就是 把產生的 restore-1-flat.vmdk 跟 restore-flat.vmdk 刪除
並且重新命名 vm-1-flat.vmdk 跟 vm-flat.vmdk 為 restore-1-flat.vmdk 跟 restore-flat.vmdk

這樣磁碟裡的資料才會回來

2019/01/29

LVM 建置指令



每次要建lvm都忘記指令,來記錄一下

```shell

# 先建置分割區, 並且 type 設為8e
# 其實我不太了解如果都是用整顆硬碟的空間, 那麼要不要做這個步驟的差別是什麼(效能?對齊?其他?)
# fdisk <device Point>
$ fdisk /dev/xvdb

# 建立 Physical Volume
# pvcreate <device Partition>
$ pvcreate /dev/xvdb1

# 建立 Volume Group
# vgcreate <vg Name> <device Partition>
$ vgcreate VG1 /dev/xvdb1

# 建立 Logical Volume
# lvcreate -l 100%FREE -n <lv Name> <vg Name>
$ lvcreate -l 100%FREE -n DATA VG1

# 格式化
# mkfs.ext4 -L <label> /dev/<vg Name>/<lv Name>
$ mkfs.ext4 -L DATA /dev/VG1/DATA

# 開機自動掛載
echo "LABEL=DATA /data ext4 defaults 0 0" >> /etc/fstab
```

重灌作業系統後 使用 mdadm 重組你的 raid



前些時間因為升級 ubuntu 版本失敗導致必需重灌

然後就出現以下問題了

當初建好的 RAID5 消失了, 新的 os 不認識它所以顯示成三顆硬碟

這該怎麼辦呢?

其實不用擔心, 由於我們當時是用 mdadm 建置的, mdadm 有方法可以再把它們組起來

```shell
$ mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1
```

平時資料還是要多多備份啊