2010年7月15日 星期四

kernel: EXT3-fs error (device dm-4): ext3_lookup: unlinked inode 58079497 in dir #58073509

昨天要下班前發現架設的網站登不進去,第一個想到的是table的錯誤,但事情不是憨人想的那麼簡單,repaire table後情況依舊。查看log檔才知道是檔案系統出錯了,導致磁碟變成read only,所以session檔寫不進硬碟,造成無法登入的情況。

Jul 14 17:37:54 myhost kernel: Aborting journal on device dm-4.
Jul 14 17:37:54 myhost kernel: __journal_remove_journal_head: freeing b_committed_data
Jul 14 17:37:54 myhost kernel: EXT3-fs error (device dm-4): ext3_lookup: unlinked inode 58078839 in dir #58073509
Jul 14 17:37:54 myhost kernel: ext3_abort called.
Jul 14 17:37:54 myhost kernel: EXT3-fs error (device dm-4): ext3_journal_start_sb: Detected aborted journal
Jul 14 17:37:54 myhost kernel: Remounting filesystem read-only

所以咧,第一個想到要用的指令就是e2fsck
它可以下參數-a自動修復,另外要注意使用前要把partition umount,如果是根目錄壞掉的話,只好進入single user mode囉(還好我都有分割的好習慣XD)

# e2fsck -a /dev/vg_data/lv_data
我是用lvm所以磁碟路徑是長這樣@@;

會出現錯誤其實是我手賤,測試伺服器直接mount正式伺服器的data partition在跑,結果也有寫入session的關係,在測試伺服器下線還是怎樣後,新增加session檔的inode發生錯誤,系統強制將partition轉為read only,才導致這次的事件發生。
因為session其實是紀錄client的狀態,當很多client端同時上線時就有可能會造成io wait(雖然寫的檔都很小),所以這次索性將session資料夾mount到tmpfs上,以ramdisk的型式在跑或多或少可以加快速度。

# mount -t tmpfs tmpfs /session

要注意的是因為是寫在記憶體裡,重開機就不見囉!!
不過session不見也還好,沒什麼關係。
--
參考網站
http://www.centos.org/modules/newbb/viewtopic.php?topic_id=17036
http://www.hkcode.com/linux-bsd-notes/178
http://plog.longwin.com.tw/my_note-unix/2006/01/08/ram_disk_build_method

2010年7月12日 星期一

pclzip

同事之前幫moodle寫了作業打包下載功能,用的是pclzip。最近發現有幾筆產生的壓縮檔並沒有乖乖的在指定的位置!?於是按照課號查找,發現打包下載的連結並未出現在網頁上,而那幾筆在錯誤位址的壓縮檔,下載下來後無法解開(壓縮檔破損),且打包檔案也有缺少。
上網查了一下,在做create時可以加入參數PCLZIP_OPT_NO_COMPRESSION,以不加壓方式打包即可。
以網路上的範例來做修改
include_once('pclzip.lib.php');
$archive = new PclZip('archive.zip');
$v_list = $archive->create('data/file.txt,data/text.txt',
     PCLZIP_OPT_NO_COMPRESSION,
     PCLZIP_OPT_REMOVE_PATH, 'data',
     PCLZIP_OPT_ADD_PATH, 'install');
if ($v_list == 0) {
     die("Error : ".$archive->errorInfo(true));
}
除了這點之外,最令我頭大的是若檔名含有中文,則下載下來的壓縮檔內檔名便會出現亂碼。雖然有在寫網頁的人都知道要避免使用中文檔名,但是一般使用者可是不會管你那麼多的。由於OS是linux介面,而且這邊使用的pclzip似乎沒有支援utf-8,所以才會產生亂碼的情況。這時候需要修改pclzip.lib.php的第2780行附近,function privAddFile內其中一段設定打包進壓縮檔檔案名稱的地方(按照上面的例子來說stored_filename就會是file.txt跟text.txt,因為路徑data被設定為去除了--PCLZIP_OPT_REMOVE_PATH, 'data')
    $p_header['filename'] = $p_filename;
// TBC : Removed    $p_header['stored_filename'] = $v_stored_filename;
    $p_header['stored_filename'] =
                        iconv('utf-8','big5',$p_filedescr['stored_filename']);
這樣就可以看到中文囉!

學藝不精,花了一天時間才解決問題...
--
參考網站
http://moodle.club.tw/moodle/mod/forum/discuss.php?d=1392
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20091208184635ZIQ&fumcde=&PAGE=1
http://support.oss.org.tw/?q=node/147
http://itisjoe.pixnet.net/blog/post/14758894
http://modxcms.com/forums/index.php?topic=48191.0

2010年7月6日 星期二

Sorry, I was not able to successfully run APXS

最近網站效能碰到瓶頸,想說終於是該用PHP加速器了
APC、eAccelerator、XCache 中我挑了APC
在APC安裝前要先確定系統已安裝php-pear
安裝很簡單就像安裝pear的套件一樣,只是改成pecl而已
pecl install apc
若沒有意外的話會碰上
Sorry, I was not able to successfully run APXS
囧>,那是apache的應用程式相關
所以
yum install httpd-devel
就OK囉!

 --
但是我裝另外一台,就很不給面子出現
CRITICAL ERROR: We are channel://pear.php.net/apc-3.0.19
只好手動安裝
下載http://pecl.php.net/package/APC
照著document即可安裝成功。

參考網站
http://pecl.php.net/package/APC
http://pecl.php.net/bugs/bug.php?id=5942
--
20101227追加
在新機器上要裝apc時出現
error: pcre.h: No such file or directory

安裝一下吧
yum -y install pcre-devel

重新run一次即可

參考網站
http://www.centos.org/modules/newbb/viewtopic.php?topic_id=8447