2017年6月18日 星期日

megaraid 操作 -- 於 Acer Altos R360 f3 伺服器

此篇本是為 Acer 的伺服器而整理,到後來變成 megaraid 的操作整理,就把標題給改了。
-- 2020-03-07 記

新購一部 Acer Altos R360 f3 伺服器 (2016 年),整理一下相關資料,以供日後參考。
機器原本是裝 vSphere ESXi,最近想玩 Docker,就重灌 Gentoo Linux。選擇 Gentoo,因為它是滾動發行,沒有升級的問題。另外,因為要自己編 kernel,必須先收集相關的硬體資訊,不然,就無法正常開機了。

Acer Altos R360 f3 的配備

CPU Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (family: 0x6, model: 0x4f, stepping: 0x1)
8 x 2.5" disks
Intel Integrated RAID Module RMS3CC080
Intel I350 Gigabit Network Connection

嗯,相對於買 HP 或 ASUS 的伺服器,買宏碁的伺服器的好處是,8個磁碟的 tray 都附上,可以買自己想買的磁碟,不用多花錢。

可惜透過中信局買的 Acer 伺服器,只能用 2.5" 的硬碟。而 後來買的 ASUS 伺服器則採比較聰明的作法,在 3.5" 的硬碟匣 (tray) 上的打洞,可同時裝 2.5" 的硬碟,所以後來都買 ASUS 伺服器,雖然要再另外買硬碟匣,但還是比較划算。

lspci 顯示的硬體資料

01:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)
03:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
07:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200e [Pilot] ServerEngines (SEP1) (rev 05)

dmesg 摘要

megaraid cmm: 2.20.2.7 (Release Date: Sun Jul 16 00:01:03 EST 2006)
megaraid: 2.20.5.1 (Release Date: Thu Nov 16 15:32:35 EST 2006)
megasas: 06.811.02.00-rc1
megaraid_sas 0000:01:00.0: FW now in Ready state
scsi host10: Avago SAS based MegaRAID driver
scsi 10:2:0:0: Direct-Access     Intel    RMS3CC080        4.66 PQ: 0 ANSI: 5
random: fast init done
sd 10:2:0:0: [sda] 1167966208 512-byte logical blocks: (598 GB/557 GiB)

igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k
igb 0000:03:00.0: added PHC on eth0

将 megaraid 卡磁盘 raid0 改为 JBOD 模式

相關說明,參考: 将 megaraid 卡磁盘 raid0 改为 JBOD 模式
megaraid 卡使用 JBOD 模式,磁盘可以直接被系统识别,使用 smartctl 查看 SMART 信息和 直连 SAS 卡一样。
# megacli -PDList -aALL -Nolog|grep '^Firm'
Firmware state: JBOD
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up

行有時候要確定那個硬碟壞了,用 grep 的 OR 條件來找,比較快。

# megacli -PDList -aALL -Nolog | grep '^Firm\|Slot'
Slot Number: 0
Firmware state: JBOD
Slot Number: 3
Firmware state: Online, Spun Up
Slot Number: 4
Firmware state: Online, Spun Up
Slot Number: 6
Firmware state: Failed
Slot Number: 7
Firmware state: Online, Spun Up
Slot Number: 8
Firmware state: Online, Spun Up
Slot Number: 9
Firmware state: Online, Spun Up
Slot Number: 10
Firmware state: Online, Spun Up
Slot Number: 11
Firmware state: Online, Spun Up

硬碟使用紀錄

為了省錢,使用4顆 HGST 的 SATA 1TB 硬碟,建立 RAID 6 。2017年 6月,11月中,壞掉一顆,繼續觀察中。
後來,試著把它重插回去,看起來又是正常的。下指令,結果如下

# megacli -PDList -aALL -Nolog|grep '^Firm'
Firmware state: JBOD
Firmware state: Online, Spun Up
Firmware state: Rebuild
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up

查看硬碟的編號如下
# megacli -PDList -aALL -Nolog|grep -iE 'enclosure device id|slot Number'
Enclosure Device ID: 0
Slot Number: 0
Enclosure Device ID: 0
Slot Number: 3
Enclosure Device ID: 0
Slot Number: 4
Enclosure Device ID: 0
Slot Number: 6

RAID 6 壞掉一顆硬碟,查詢的狀態
# megacli -ldinfo -lALL -aALL
                                     
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 1 (Target Id: 1)
Name                :VD_24TB
RAID Level          : Primary-6, Secondary-0, RAID Level Qualifier-3
Size                : 21.830 TB
Sector Size         : 512
Is VD emulated      : Yes
Parity Size         : 10.915 TB
State               : Partially Degraded
Strip Size          : 256 KB
Number Of Drives    : 6
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
Bad Blocks Exist: No
PI type: No PI

Is VD Cached: No

Exit Code: 0x00

下指令察看 rebuild 進度
# watch -n 30 'megacli -PDRbld -ShowProg -PhysDrv [0:4] -aALL'

Every 30.0s: megacli -PDRbld -ShowProg -PhysDrv [0:...  Mon Mar  2 10:08:42 2020

Rebuild Progress on Device at Enclosure 0, Slot 4 Completed 6% in 1 Minutes.

Exit Code: 0x00

讓 LED 閃爍 (LED blink)

Syntax: megacli -PdLocate <-start|-stop> -physdrv[<enclosure#>:<disk#>] -a<adapter#>

In this example we will locate disk 0 on adapter 0:
[root@localhost MegaCli]# megacli -PdLocate -start -physdrv[252:0] -a0
 Adapter: 0: Device at EnclId-252 SlotId-0 — PD Locate Start Command was successfully sent to Firmware
 Exit Code: 0x00
 [root@localhost MegaCli]# 
相關資料及指令,參考 LSI MegaRAID SAS
在 github 上,有原作者寫的 megaclisas-status,可供週期性檢查 disk array 的狀態。

關掉/開啟 BEEP 聲

在 rebuild 時,關掉聲音
# megacli -AdpSetProp AlarmSilence -a0
  Adapter 0: Set alarm to Silenced success.
  Exit Code: 0x00

Enable 警告聲音
# megacli -AdpGetProp AlarmDsply -a0
  Adapter 0: Alarm Status is Enabled
  Exit Code: 0x00

查詢警告聲音的設定
# megacli -AdpGetProp AlarmDsply -a0
  Adapter 0: Alarm Status is Enabled
  Exit Code: 0x00

警告聲的代碼: Controller beep codes

Consistency Check 

不時就會看到硬碟的燈一直在閃,原來它會定時在背後執行 Consistency Check。查看 Consistency Check 目前正在進行的工作
# megacli -LDCC -ShowProg -lall -aall 

To see next scheduled Consistency Check time,預設一個星期執行一次。
# megacli -AdpCcSched -Info -aALL
                                     
Adapter #0

Operation Mode: Concurrent
Execution Delay: 168
Next start time: 03/07/2020, 03:00:00
Current State: Active
Number of iterations: 21
Number of VD completed: 1
Excluded VDs          : None
Exit Code: 0x00
Consistency Check 有兩種 mode, concurrent mode 及 sequencial mode,可以自己更改。Note: After change mode from disable to concurrent/sequencial, the next scheduled CC time will become year 2135, you have to set next scheduled run time again.

也可以更改 Consistency Check delay interval, Consistency Check Rate,亦可 manually start Consistency Check。

取得 Consistency Check Rate
# megacli -AdpGetProp CCRate -aALL
Adapter 0: Check Consistency Rate = 30% ##default 
If you get an error like "Consistency Check suspended on VD. . .", you can resume like so:
# MegaCli64 -LDCC -resume -lall -aall
At the end, if you want check Adapter properties, here is it
# MegaCli64 -AdpAllInfo -aALL

2017年6月11日 星期日

使用 Docker 架設 Git server

** 不能使用 port 10080,此 port 已有特定用途。 

** 第一次啟動後,可以設密碼,預設管理者是 root

目標,透過反向代理來存取 git。雖然可以很輕易的架一個VM,但也是很煩,就透過反向代理來存取Docker 上架設的 Git server,會省事很多。

就用最多人用的吧 https://github.com/sameersbn/docker-gitlab
參考官網的「Deploy to a subdirectory (relative url root)」的段落。

有中文的說明,看起來更快些
https://jigsawye.com/2015/09/25/gitlab-ce-in-docker/

開始,沒有懸念的,直接拉最新版的吧。另外,需要用到 postgresql 和 redis,就一起拉下來吧。
docker pull sameersbn/postgresql 
docker pull sameersbn/redis
docker pull sameersbn/gitlab

拉下來的 image 的大小,gitlab 大約 1.288GB,postgresql 約 231.5 MB,redis 約 203.4 MB。

先用手動啟動吧,成功後,再來調設定檔。
啟動 PostgreSQL container:
root #docker run --name gitlab-postgresql -d \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
    --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
    sameersbn/postgresql:latest

啟動 Redis container:
root #docker run --name gitlab-redis -d \
    --volume /srv/docker/gitlab/redis:/var/lib/redis \
    sameersbn/redis:latest

最後啟動 Gitlab container。這邊要注意我除了照原文件之外,還額外加上 GITLAB_HOST,因為我的建置環境不在本機上,所以要加上該環境的 ip,否則 user 的大頭貼會是死圖。另外指令中的 long-and-random-alpha-numeric-string 請替換成一組隨機字串,可以使用 pwgen -Bsv1 64 來產生,看起來大概像這樣,7rfL2VSJ8s3kfNpbsPlcH73rXgFQ9QDFXzrtrBkMPm8GnvfCm5t6KRP2qpnn9fjT。執行指令如下。
root # docker run --name gitlab -d \
    --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
    --publish 10022:22 --publish 10080:80 \
    --env 'GITLAB_HOST=10.161.81.162' \
    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string' \
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string' \
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string' \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:latest

設定 systemd 的啟動程序,參考此網址
https://github.com/sameersbn/docker-gitlab/issues/237


補上 docker-compose.yml:
version: '2'

services:
  redis:
    restart: always
    image: sameersbn/redis:latest
    command:
    - --loglevel warning
    volumes:
    - /srv/docker/gitlab/redis:/var/lib/redis:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:9.6-2
    volumes:
    - /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm

  gitlab:
    restart: always
    image: sameersbn/gitlab:9.2.5
    depends_on:
      - redis
      - postgresql
    ports:
      - "10080:80"
      - "10022:22"
    volumes:
      - /srv/docker/gitlab/gitlab:/home/git/data:Z
    environment:
      - DEBUG=false

      - DB_ADAPTER=postgresql
      - DB_HOST=postgresql
      - DB_PORT=5432
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production

      - REDIS_HOST=redis
      - REDIS_PORT=6379

      - GITLAB_PORT=10080
      - GITLAB_SSH_PORT=10022
      - GITLAB_RELATIVE_URL_ROOT=/git
      - GITLAB_SECRETS_DB_KEY_BASE=Lzzcp5Vrmh3Lg4B9Mwj8v4Gj3zs7dHN6vMr8HMLxJVqrS2kXhdjQdpMnWNZxP6pz
      - GITLAB_SECRETS_SECRET_KEY_BASE=hTNCdbHw5hz9nmKJvmtB7HhNSfdjzXxMPnfKnDwvbRxdTw4GzcWWzlnTxhDHpVx2
      - GITLAB_SECRETS_OTP_KEY_BASE=7rfL2VSJ8s3kfNpbsPlcH73rXgFQ9QDFXzrtrBkMPm8GnvfCm5t6KRP2qpnn9fjT


嗯,使用 docker-composer,不需設定  systemd

Linux Shell 使用

使用 shell 的一些指令,可以省下很多功夫。尤其是網路和 Google 大神的幫忙,可以找到很多神奇的作法。
# docker ps -a | grep -i 'Exit' | awk '{print $1}' | xargs docker rm
移除停止的 docker container



2017年5月26日 星期五

保險公司,真是是穩賺不賠的生意

保險公司,還真是穩賺不賠啊
只是A到保險桿,就整個換掉,花了 8千多元
保險公司 (國泰) 也慷慨大方的理賠
然後,轉過身來,伸手向小機車的車主要錢
連談都沒得談

保險公司,向保戶收保費,不就是要負責人家在出事時,幫人家花錢消災嗎?
怎麼,收來的保費一分不用花,然後,就向另一方討呢?
又憑著不對等的地位,他有法務人員,有經驗,就連談都不用談,就強勢的要人家賠
而且,是拖了兩年,才出手要錢

若是調解,至少要找公正的廠商估價,然後再商談賠償金額
這種公司,讓人非常不爽
不爽
XX 國 XX 泰 XX,去 S 吧 .....

嗯,對這種爛作法,嘔氣1天就好,多了划不來
不過,每多想到一次,就不禁多罵一次,爛X國X泰,惡劣的公司
小人物,沒能做什麼,只能很阿Q的,衷心祝福它,那天,換他倒霉吧

2017年5月17日 星期三

Linux 下的 Google Drive Client

最近 (2017 年 5 月), 勒索病毒泛濫,而且會透過網芳傳播,防不勝防,唯一可行的作法是 3/2/1 的作法,即備份 3 次,2 種媒體,例如硬碟與雲端,1 為異地備援,避免天災的問題。雲端,就用 Google Drive 吧,正好在學校有 10TB 的空間可用。

在 Gentoo 下,可以找到兩種 Google Drive Client,net-misc/drive 及 net-misc/grive,不過都是 Unofficial,自己衡量著用吧。我後來選擇 net-misc/drive,看起來,指令比較多種,功能分得比較細,用起來,比較靈活。

可參考 https://www.maketecheasier.com/google-drive-clients-linux。


執行的畫面如上,指令的使用,請參考 https://github.com/odeke-em/drive。
我目前是用來當異地備援用,所以都是用 push 指令比較多。

使用前,先建立要同步的目錄,例如 ~/gdrive。然後執行
$ drive init ~/gdrive
此時,會出現認證的聯結,把它剪貼到瀏覽器,認證之後,取後 token,把它複製到終端機,即可完成認證。

取消認證,指令如下
$ drive deinit [-no-prompt]

備份特定檔案到特定目錄下的指令如下
$ drive push -destination backup/Bak01 -files B22954.bkf B2947.bkf 
比對之後,會顯示要複製的檔案,確認後才開始複製。

使用的感覺,在學校的辦公室裡,把資料備份到 Google drive 上,竟然比備到區網的 NAS 還要快,只能說 Google 太神奇了。


2017年5月16日 星期二

從 Xfce 到 LXQt

不知從那時候開始,就一直使用 Xfce 當 Linux 的桌面,到現在也有 5, 6 年了吧。最近,重裝 Gentoo 後,gtk 的應用程式就變得怪怪的,有些東西看不到了。

如下圖,左邊是在 LXQt 下看到的畫面,右邊是在 Xfce 下看到的情形,中間的控制 bar 不見了。


這些日子,心血來潮,想找其他的 wm 來用,就看上了 LXQt,然後就來試用了。
現在,2017年5月,LXQt 才 0.11 版,和 4.12 版的 Xfc 比起來,可想而知,會少很多東西。

在 Xfce,最中意的就是它的右鍵的 menu 功能,可以按裝 x11-misc/openbox-menu 來動態產生。先將 /etc/xdg/openbox/menu.xml 複製到 ~/.config/openbox/ 下,然後修改

<menu execute="/usr/bin/openbox-menu" id="desktop-app-menu" label="Applications"/>
....
<menu id="root-menu" label="Openbox 3">
    ....
    <menu id="desktop-app-menu"/>
    ....
</menu>

我習慣在桌面上,擺個類比的指針時鐘。x11-misc/cairo-clock 看起來蠻漂亮的,但裝好後,執行時,都會抱怨沒有 composited enviroment,找了好一陣子,在安裝 x11-misc/compton,就可正常執行了。

後記,後來確認是自己的問題,在 Xfce 下,沒有設定正確的外觀,所以就不正常了。使用 LxQt 一陣子之後,又回到 Xfce 了,終究在使用上,還是方便些。

2017年5月3日 星期三

學習成為電腦高手,使用 Gentoo Linux

很多人,眼中只有 Microsoft 的 Windows,連以電腦為專業的學生,也是一樣。其實,以我個人的經驗來說,在 20 多年前, 不經意的接觸了 Uinux 和 Linux,然後一直用到現在,覺得學習 Linux,更能累積個人的電腦知識,可以進階成為一般人眼中的電腦高手。儘管已經使用了十多年,目前我也以 Linux 作為電腦的主要 OS,可是對於 Linux 還是只懂得一些皮毛而已,對整個所謂的電腦知識,所瞭解的就更少了。

目前,有非常多的 Linux 發行版本,其中有很多人會在桌機使用 Ubuntu,或在伺服器使用 CentOS。基本上,使用 Ubuntu,現在已進步到和裝 Windows 類似了,只要按下一步就好了。但 Ubuntu 更強的地方是,不用安裝,也可以用,因此,在系統救援時,很好用。我在桌機上,最早使用的是 Mandrake Linux,後來大約在 10多年前,碰到了 Gentoo Linux,就一直用到現在。Mandrake Linux 現在已經不存在了,當時使用 Mandrake 的經驗是,在升級或安裝新套件時,常碰到相依性衝突的問題,有些東西就無法升級或安裝了。期間,也曾經試過其他的發行版,像在筆電上試過 Arch Linux,它和 Gentoo Linux 是近親,不過還是比較沒彈性,後來還是回到 Gentoo Linux。不過 Arch Linux 的文件非常豐富,正好補足了 Gentoo Linux 文件不足的問題。另外,我在伺服器上,也都用 CentOS,因為 Gentoo 裝好到可以重開機,至少也要 1小時,而裝 CentOS 只是幾分鐘的事,沒必要折騰。

在以前,使用 Gentoo,要裝到有圖形視窗可用,可以用瀏覽器上網,大概要花好幾天。直到3 年前,還是大概要花個 1 ,2天的時間。可是到了去年吧,2016 年,Intel 的 CPU,硬是又快了一倍,大約 1 天,就可以有基本的環境可用。所以,現在玩 Gentoo,進入的門檻實在降低很多了。而且,現在的 CPU 都是多核心,VM 的效能又和實體機,不相上下,可以用 VM 來學習裝 Gentoo,等熟悉了,再正式使用 Gentoo 當成桌機的 OS。

相對於其他發行的 Linux,有不同的版本,Gentoo 是採滾動發行,並沒有版本的分別。因此裝好之後,可以將各別套件升級,也可以將 kernel 升級,不需要重灌整個 OS。除非,你想要換成不同的 file system,或是換新硬碟了。嗯,其實換新硬碟,也不需要重灌,只要切好 partition,使用 cpio 指令,就把整個系統複製過去了。

學會開機,第一步,起手式,也是最大的難關。必需瞭解硬碟的分割,決定檔案系統,安裝 boot loader,製作開機的 OS image。

滾動發行,免升級 OS。最近,因為升級到 gcc-5,Vmware workstation 無法啟動,就軟脆重裝,但是裝好後,感覺沒什麼差。而且,新安裝的,預設就是 gcc-5,Vmware workstation 還是無法啟動,降回至 gcc-4 以後,才又正常。Gentoo 的 portage 進化到頗為完善,各個 package 可以順利升級,若有衝突,在升級時,就必須解決,才能順利安裝新版的。


學會解決各種問題
硬體進步,安裝時間縮短一半

網誌存檔