顯示具有 FreeBSD 標籤的文章。 顯示所有文章
顯示具有 FreeBSD 標籤的文章。 顯示所有文章

2012年12月24日 星期一

FreeBSD with vmtools in vsphere VM 收到shutdown guest沒有進行ACPI off關機的解決方式

修改 /usr/local/etc/rc.d/vmware-tools.sh, 加上紅色字串部分即可


# Start the guest OS daemon
vmware_start_guestd() {
  cd "$vmdb_answer_SBINDIR" && "$vmdb_answer_SBINDIR"/vmware-guestd \
    --background "$GUESTD_PID_FILE" --halt-command "/sbin/halt -p"
}

2011年7月5日 星期二

自製DNS load balance(正確說只有sharing)

前情提要: 因client DNS query是走UDP, 免費套件中比較好的load balance是HAproxy, 但只支援TCP, 所以只好自製. 作法大致上是用pf(pakcet filter)防火牆中的nat+rdr去達成分送後端的功能, 再配合table可動態增刪, 加上自製的一些shell script與一些小軟體, 即可做到DNS load balance server.

所需機器: 一台用作load balance server(簡稱LB), 三台DNS server(簡稱DNS-A, DNS-B, DNS-C), 當然後端要幾台是隨意...

架構: 類似NAT+private ip的網路


2011年7月4日 星期一

自動重啟動停掉的服務 shell script

rcd_service_mon.sh


程式碼:


#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/root/bin


if [ "$1" = "local" ];
then
  rcd="/usr/local/etc/rc.d"
  service="$2"
else
  rcd="/etc/rc.d"
  service="$1"
fi


status=` $rcd/$service status|grep 'is not running' `
if [ "$status" ];
then
  echo "$1 is not running, auto restart..."
  $rcd/$1 start
fi

用法:
rcd_service_mon.sh service_name 或 rcd_service_mon.sh local service_name

例:
1. 對named作用: rcd_service_mon.sh named
2. 對 apache 2.2 作用: rcd_service_mon.sh local apache22

詳細解說:
簡單說就是把手動的事情變成自動, 程式自動呼叫rc.d下的啟動用shell script, 並加上 status以得知狀態, 然後過濾輸出確認是否為沒在運作的狀況, 若沒在運作就嘗試啟動之.

2011年7月3日 星期日

unix epoch time 用date指令轉換

epoch time 是unix常用的一種時間, 為自從1970/1/1 0:0:0 開始到指定時間
所經過的秒數, 但閱讀不易, 可透過下面的指令轉換

date -j -f '%s' 1273075362 '+%Y/%m/%d %H:%M:%S'

顯示結果為
2010/05/06 00:02:42

其中 
-j 不因執行此指令設定系統時間
-f '%s' 指定輸入的時間格式, 在此即為秒
1273075362 即為epoch time
'+%Y/%m/%d %H:%M:%S' 顯示的格式



被freebsd 7.X以前的版本的fdisk寫過dd(dangerously dedicated)的硬碟處理

昨日幫朋友重灌起來的系統在其他硬碟上重新建立資料碟, 發生了fdisk那關寫入成功但再次讀取卻啥都沒有的狀況,
經過一夜(?)思考後, 想到應該是mbr有什麼東西被dd模式改寫掉造成, 解決辦法是使用
fdisk -B /dev/adX
並於第一個問題回應 y 之後問要不要寫入當然也要回 y, 即可重寫mbr的boot code, 之後再去sysinstall的fdisk就可以看到之前切出來的partition,
且/dev/adXs1 s2也都跑出來了.

其他失敗的嘗試有
1.dd if=/dev/zero of=/dev/adX bs=1m count=10
無效, 因為存取mbr磁區需另外跟硬碟溝通
2. fdisk -i /dev/adX
無效, 後來發現跟這東西完全無關...