天天看點

苦戰samba亂碼『看我出招系列』

作者:田逸([email][email protected][/email])  

※版權聲明:原創作品,如需轉載,請與作者聯系。否則将追究法律責任。

    一台運作Redhat 7.3的伺服器由于機器使用時間過久而出現硬碟故障,具體的表現是系統運作一段時間後就挂起了;經診斷是磁盤出現壞道所緻。于是通知使用者盡可能的備份資料,然後申請一個新的硬碟,打算把資料複制到新的系統。在做這個事情之前,我試着在單使用者下運作fsck檢查檔案系統,但沒有成功,看來隻得用新的系統來挂接有故障的硬碟,然後再複制目錄和檔案。

作者:田逸 [出處:51cto部落格

在硬碟上我用RedHat AS 4替代以前的RedHat linux 7,安裝完成後以源碼方式安裝了Samba軟體,操作步驟如下:

請輸入内容

1、下載下傳檔案 [root@localhost ~]# wget [url]http://us5.samba.org/samba/ftp/samba-3.0.23d.tar.gz[/url]  

2、在目前目錄解壓檔案 [root@localhost ~]# tar zxvf samba-3.0.23d.tar.gz; cd samba-3.0.23d/source

3、配置、編譯及安裝   [root@localhost ~]# ./configure –prefix=/usr/local/samba  //指定安裝目錄為/usr/local/samba

   [root@localhost ~]#make;make install

4、拷貝samba的配置檔案  [root@localhost ~]# cd ..; cd examples; cp smb.conf.default /usr/local/samba/lib/smb.conf.

5、修改配置檔案/usr/local/samba/lib/smb.conf。根據自己的需求修改,一般而言,預設的情況都能滿足要求。如果做過修改,修改完成後,運作testperm /usr/local/samba/lib/smb.conf檢查一下配置檔案是否正确。如果正确無誤将出現類似後面的輸出:Loaded services file OK.

6、添加samba使用者。因為samba使用者需是系統使用者,是以在添加samba使用者時需要檢查添加的使用者是否屬于系統使用者。再執行指令 /usr/local/samba/bin/smbpasswd  -a <username> 輸入2次同樣的密碼就能成功添加samba使用者。順便說明一下,很多初學者會忽略添加samba使用者這個過程,進而導緻他不能從windows用戶端正常登陸。

7、啟用samba服務。/usr/local/samba/sbin/nmbd 及 /usr/local/samba/sbin/smbd

    正确運作後,我把損壞的硬碟挂接到目錄/mnt/hdd5下,然後按照以前的目錄布局把相關的目錄及檔案複制到相關的位置,并給其相應的權限。做完後告訴使用者(就是同僚)讓他們去恢複和使用samba。一會兒使用者反應samba的目錄和檔案出現中文亂碼的情況,換機器試也如此,其狀态如下圖所示:

苦戰samba亂碼『看我出招系列』

作者:田逸

嘗試着修改配置檔案,手動加上代碼頁的語言為zh_CN,重新啟動samba服務,在windows的用戶端還是亂碼,再換成其他編碼,還是不行,後來又把samba删除換成更新的版本和換成低的版本,也是不行,客戶催得很急,心裡很是緊張。

不經意中,發現用ssh的用戶端軟體securecrt能正常顯示中文,連samba的使用者目錄裡的中文名檔案和目錄都能正常顯示,我想:能不能用ssh這樣的用戶端工具來實作一個轉換呢?試一試吧!于是我拿出SSH Secure File Transfer Client這個工具連接配接linux 伺服器,察看linux伺服器這端的檔案和目錄,發現除了samba使用者目錄的中文亂碼外,其他目錄的中文名稱則能正常顯示,接着在linux的samba使用者目錄建一個中文名的目錄,再從網路上的芳鄰通路samba發現中文名稱顯示正常。再試着在linux下用cp拷貝挂接分區的檔案到samba使用者目錄,從windows的網路上的芳鄰通路windows還是亂碼,但把那些亂碼的中文名目錄或檔案通過SSH Secure File Transfer Client拷貝到windows目錄卻沒有亂碼,再把這些目錄/檔案拷回通過SSH Secure File Transfer Client拷貝samba使用者目錄則正常。于是得到這樣的解決辦法:在windows上通過 SSH Secure File Transfer Client把linux上挂接目錄的檔案拷貝到windows的目錄,然後再把這些目錄/檔案拷貝回linux的samba使用者目錄即可。

作者:田逸 [url]http://sery.blog.51cto.com[/url]

照上面的辦法測試了幾個小檔案,發現此法可行。但有這樣一個問題—需要拷貝的目錄大小是數十GB,要來回倒騰可能需要很長的時間,而且我的windows硬碟的空間還沒有這麼多的空間來存儲這些中轉資料,看來還得使用一點技巧。

我的操作是這樣的:先用windows網路上的芳鄰通路samba伺服器,把samba目錄映射成windows的網絡驅動器(如下圖所示):

苦戰samba亂碼『看我出招系列』

然後使用SSH Secure File Transfer Client把linux挂接目錄的資料拷貝到windows的網絡驅動器下(這實際上是在linux伺服器上進行資料拷貝)。過程如下圖所示:

苦戰samba亂碼『看我出招系列』

花了很長一段時間,終于把這資料複制完畢,用windows的網路上的芳鄰通路samba,中文目錄和中文檔案名顯示正常;用VSS用戶端通路samba,一切正常。

造成亂碼的原因是由于不同版本的linux的字元編碼不同造成的(因為原來的系統進不去了,其編碼不能再找到),通過windows中轉一下就一緻了。

注:運作指令 export LANG=zh_CN 把language臨時設定成zh_CN.

  ※版權聲明:原創作品,如需轉載,請與作者聯系。否則将追究法律責任。

                                              2007-1-6  于福緣門

繼續閱讀