跳到主要內容

Mount sequence in fstab systemd with aufs

接手了一台 Jenkins server 他的Infrastructure as Code設計概念很棒
他用 aufs 來掛載 EBS data volume,AMI 的 rebuild 是透過 ansible 和 yaml 來設定,再透過 CloudFormation 自動 deploy

所以要更新的時候只要 commit 更新後的版本號碼進去 repo 就會有一個 fully patched AMI,然後再把 EBS volume 用 overlay fs 掛載到新的 /var/lib/jenkins 目錄

/etc/fstab 是這樣寫的:
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 0
LABEL=jenkins-ebs-fs /mnt/jenkins ext4 defaults,nofail 0 2
none /var/lib/jenkins aufs br=/mnt/jenkins=rw:/var/lib/jenkins=ro,udba=reval 0 0

但長久以來一直有個問題是,每次重新開機後,/var/lib/jenkins 的目錄並沒有正確的疊上 EBS data volume 裡的資料

所以 workaround 都是 umount /var/lib/jenkins 再 mount -a 卻又好了

最近又要更新 Jenkins ,實在是很討厭每次都要手動進去把 fs 重新 mount 起來

原本以為是 jenkins service 啟動時間和 overlay fs 是不是有 in-use lock 之類,或者是 aufs.ko 載入的時候和 fstab 先後的問題

無意間看到有人說 /etc/fstab 的載入順序不保證是按照設定檔裡寫的順序的!!

df -h 一看,發現第一次開機有問題的 mount /var/lib/jenkins 比 /mnt/jenkins 還前面

mount -a 正常的版本是 /mnt/jenkins 會比 /var/lib/jenkins 早
(其實以前也一直沒注意 df -h 的顯示順序)

最後只要加上 x-systemd.requires=/mnt/jenkins 就好囉!


Ref:
https://github.com/systemd/systemd/commit/3519d230c8bafe834b2dac26ace49fcfba139823


留言

這個網誌中的熱門文章

flash tomato firmware on ASUS RT-N12-C1

Tomato by Shibby For RT-N12-C1 we have to download from: K26RT-N – MIPSR2 – special builds for E4200, RT-N10U, RT-N12B1/C1, RT-N15U, RT-N53, RT-N66U, WNR3500Lv2 and newer Linksys E-series routers Step: 1. Reset AP to factory default 2. Setup staic IP for you desktop or laptop 3. Unplug power 4. Press the reset button in the back of AP the plug power 5. Wait until the pwoer led falsh slowly 6. Open browser and connect http://192.168.1.1 7. You should see a firmware upload page, select the tomato firmware and upload it 8. After upload success wait 5 minutes 9. Connect http://192.168.1.1, if you see the tomato webpage, you have done the job!

3M UVA3000 更換濾芯紫外線燈匣

用了一年的3M濾水器提示說要換濾芯和燈匣 上 Youtube 想找教學的影片可是沒看到 UVA 3000 的 經過了一番奮戰後在這邊記錄一下 希望可以幫助後人,以免再重蹈覆轍。 Step 1. 拔掉插頭,把淨水器從牆上拿下來(基本上他是掛著而已),比較方便施工。 Step 2. 把前蓋往上拉,很容易就可以看到裡面的東西了。 Step 3. 打開後可以看到有兩個柱狀體,左邊的是燈匣,右邊的是濾芯。 Step 4. 這裡有個祕技是,這兩個柱狀體是可以往上 翻開30 度左右,這樣就可以有比較大的空間施工。 Step 4. 更換濾芯的話,柱狀體的瓶身上有箭頭,往左就是轉開,往右就是鎖緊。 Step 5. 更換燈匣的話比較麻煩一點,因為他底部是電源,頂部的右邊有個突出來的小方塊。對照淨水器上方連接處的話會有個弧形的凹槽,這是要 match 的.如果你只注意瓶身的箭頭往右鎖回去,就會造成漏水...Orz... Step 6. 把前蓋蓋回,機器掛回牆上,插插頭,開水,如果機器沒有告訴你有燈匣異常或漏水的話,就可以長按 C / UV  Reset 計數器了. 所以關鍵字就是,要往上翻 30 度,燈匣上面的小凸點要在右側,要看瓶身的 小箭頭. May it helps!

MySQL CONVERT_TZ return NULL

在 local dev 環境想要 reproduce 一個 bug 的時候, 卻發現在我的環境 MySQL store procedure 的行為和 production 機器上的不一樣 原本以為是 store procedure 的邏輯有問題 最後發現原來是 CONVERT_TZ() 搞的鬼... 因為我的 local dev 環境是自己從零開始 setup 的 沒想到 CONVERT_TZ 這個 MySQL 內建的 function 需要一些 initial data 不然只要丟給他轉換的日期時間都會回傳 NULL.... 解決方法就是 mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql - u root mysql 這樣就會把 zoneinfo 轉成 CONVERT_TZ 所需要的資料 我的 local dev 環境的行為就恢復正常啦~ Reference: http://stackoverflow.com/questions/14454304/convert-tz-returns-null