摘要
本文包括了在IBM Rational ClearCase協(xié)作開發(fā)環(huán)境中編譯、安裝、配置和修改Samba,包括一些常見錯(cuò)誤的深入解決方法。本文描述基于標(biāo)準(zhǔn)模板的配置,這種配置在世界上大多數(shù)Nortel 網(wǎng)站使用。
回頁首
相關(guān)的文章
下面的zip文件包括模板樣例,詳細(xì)的指導(dǎo)和其它的資源。要想查看這些文件,下載zip文件到本地,解壓縮,然后打開文件 samba.html
.
下載
回頁首
IBM Rational ClearCase-Samba 協(xié)同環(huán)境的設(shè)置和問題解決
本文包括以下主題:
- 什么是協(xié)同環(huán)境?
- 如何從源代碼構(gòu)建Samba
- 如何配置Samba
- 從Samba 2.0.X升級到Samba 2.X
- Samba和Rational ClearCase問題解決
我非常愿意告訴你一點(diǎn)背景,關(guān)于我為什么關(guān)心更有效地設(shè)置和配置Samba這個(gè)主題。我從1999年3月開始使用Samba,配置幾個(gè)服務(wù)器。每個(gè)服務(wù)器都需要手工配置,這一點(diǎn)是很痛苦的。此外,我們有多種不同的環(huán)境:從擁有500個(gè)VOB的8個(gè)VOB服務(wù)器到只有22個(gè)VOB的一個(gè)VOB服務(wù)器。另外,我們的環(huán)境是分布的,在美國和加拿大有幾個(gè)工作場所,還在巴西、英國、法國有工作地點(diǎn)。因此,我一直努力工作以使得配置和設(shè)置過程變得更容易。
ClearCase 協(xié)同環(huán)境
為了更好地理解本文的內(nèi)容,回答下面的問題是有幫助的:
- 什么是ClearCase協(xié)同環(huán)境?ClearCase支持UNIX和Microsoft Windows客戶端混合環(huán)境。
- 為什么我們需要它?你必須使用NFS或者SMB服務(wù)器產(chǎn)品來得到客戶端的數(shù)據(jù)。
- 為什么我們要使用Samba?
- 它是開源的,也就意味著是免費(fèi)的。
- 它的配置是以服務(wù)器為中心的--我僅僅需要在很少的地方進(jìn)行配置(我可不愿意出去配置每個(gè)客戶端)。
我已經(jīng)試過TAS、Hummingbird Maestro、和其它NFS客戶端產(chǎn)品,但是我已經(jīng)在使用Samba上有最少的麻煩和最好的成果。
構(gòu)建Samba
得到源代碼是很容易的。當(dāng)前的版本是2.2.8a,它已經(jīng)被證實(shí)可以用在ClearCase上。你可以從 Samba website得到源代碼。注意它有一個(gè)優(yōu)勢是源代碼可以編譯為64位的應(yīng)用程序。我在2001年遇到的問題是我不能夠Build。即使我限制了mnode設(shè)置,它仍然不能工作。我給出了一個(gè)補(bǔ)丁可以讓我打開更多的文件,并把它提交給了Samba開發(fā)組。64-Bit 編譯可以讓你打開更多的文件而不用限制 mnodes
的個(gè)數(shù)(稍后討論)。一些操作系統(tǒng)可能不需要編譯成64-bit。圖1描述了在Solaris環(huán)境中構(gòu)建Samba。
|
圖 1: 在Solaris中構(gòu)建Samba |
如果你想要關(guān)于這個(gè)patch的更多詳細(xì)信息,我可以提供下面的鏈接:
在32-bit環(huán)境中,有與使用系統(tǒng)調(diào)用 fopen
有關(guān)的另一個(gè)限制。Samba使用這個(gè)系統(tǒng)調(diào)用來打開一些文件,通常是log文件。當(dāng)打開超過256個(gè)文件時(shí),Samba服務(wù)器將出現(xiàn)錯(cuò)誤。這時(shí),將終止Samba的安裝,Samba將不可用。
圖 2 顯示你可以使用不同的編譯器把Samba編譯成64-bit的應(yīng)用程序。Forte編輯器是你可以從Sun買到的一種編譯器。你也可以使用GCC (GCC 3.x流需要進(jìn)行64-bit編譯).
|
圖 2: 使用Sun Forte或者GCC Build Samba |
你也可以在HP-UX 上構(gòu)建(圖 3),HP-UX 11.x 是一個(gè)64-bit的操作系統(tǒng)。此外,在圖3的第2小節(jié)中,有一些可以更改的設(shè)置,這些設(shè)置可以用來改善性能。
|
圖 3: 在HP-UX上構(gòu)建Samba |
一個(gè)附加的編譯步驟可以編譯兩個(gè)運(yùn)行Samba時(shí)很有用的實(shí)用程序,如圖4所示。缺省時(shí),常規(guī)的編譯并不構(gòu)建這些程序。它們可以幫助你管理數(shù)據(jù)庫密碼和其它一些對操作Samba很重要的參數(shù)。
|
圖 4: 安裝附加的Samba實(shí)用程序 |
圖5顯示在你使用 SWAT--一種基于Web的管理Samba的工具--時(shí)可能出現(xiàn)的編譯問題。
|
圖 5: 可能的編譯問題 |
問題的現(xiàn)象是:在你輸入你的用戶名和密碼準(zhǔn)備訪問SWAT時(shí),它返回一個(gè)空的頁面或者什么也不返回。這應(yīng)該是 SWAT返回了一個(gè)SEGV信號。問題的原因是有壞的文件頭,但是如果你使用最新的發(fā)布版本的話,這個(gè)問題應(yīng)該已經(jīng)解決,他們修正了這個(gè)問題。如果在你試圖使用SWAT時(shí)出現(xiàn)這個(gè)問題,運(yùn)行:
CPPFLAGS=' -D_EXTENSIONS_'; export CPPFLAGS
最常見的原因是,在有人試圖使用GCC 2.x代替3.x時(shí)GCC 64-bit編譯失敗,前面已經(jīng)討論過,你必須使用GCC 3.x或者以后的版本。最后,在2.2的Stream中有一個(gè)中間的Bug:如果你試圖構(gòu)建一個(gè)共享庫時(shí),共享庫會失敗,因?yàn)樗荒芡ㄟ^所有的編譯器修正標(biāo)志。這個(gè)問題可以通過定義一個(gè)特殊的SHLD宏來解決:
make SHLD=' ${CC} ${CFLAGS} ' |
在HP-UX 11中,如果你使用這個(gè)選項(xiàng)構(gòu)建 libsmbclient
,它似乎失敗,但是它對正常操作是沒有必要的(它是一個(gè)實(shí)用程序庫,你可以在你自己的程序中使用)。我不能夠確定它為什么失敗和如何修復(fù)它,因此當(dāng)前的工作很簡單,不包括它就可以了。最后,在使用Sun編譯器構(gòu)建64-bit的一些附加選項(xiàng)(圖6):
|
圖 6: HP-UX 編譯問題和Sun Forte選項(xiàng) |
配置 Samba
關(guān)于配置文件的結(jié)構(gòu),我進(jìn)行了一些修改以便使得可以更加容易地把配置文件發(fā)布到很多個(gè)服務(wù)器,而不需要在每個(gè)服務(wù)器上進(jìn)行更多的配置工作。缺省時(shí),配置文件的名字為 smb.conf
。我仍然有這個(gè)文件,但是我增加的兩個(gè)Hook配置 smb.conf.global.<hostname>
和 smb.conf.shares.<hostname>
。Global文件維護(hù)一些與系統(tǒng)相關(guān)的參數(shù)。你只需要在初始設(shè)置服務(wù)器時(shí)配置它,以后不需要進(jìn)行修改。
The smb.conf.shares.<hostname>
是用來配置你的Samba服務(wù)器可用共享的文件。這個(gè)配置文件你可以隨著時(shí)間的推移進(jìn)行修改,因?yàn)楣蚕韺⒈徊粩嗟貏?chuàng)建、刪除和修改。
Example templates 是這些文件的示例模板--它們是機(jī)器可讀的格式。初始文件, smb.conf
,不需要進(jìn)行任何修改。你僅僅需要做的事情就是,如果你的操作系統(tǒng)是32-bit的,你要設(shè)置 max open files一個(gè)較小的數(shù)值。但是,我仍然建議你盡可能不使用32-bit操作系統(tǒng)。
如果在系統(tǒng)有多個(gè)網(wǎng)絡(luò)接口時(shí),你想要獨(dú)立運(yùn)行 smbd
和 nmbd
daemons,你必須修改 smb.conf
文件。我們下面再討論為什么你要有分開的daemon。如果你正在使用多個(gè)daemon,你要分開保存你的Log文件。注意log文件是很重要的文件,因?yàn)樗鼈兛梢詭椭愀櫿{(diào)試問題。我使用的缺省配置是每個(gè)客戶端有獨(dú)立的log文件:如果你僅僅使用一個(gè)Log文件來處理數(shù)千個(gè)客戶端,要想在文件中找到你所需要的信息是非常困難的。這種情況下Log文件一般有10M左右。如果你有上千個(gè)客戶端,每個(gè)都有10M的Log文件,它將占有大量的空間。當(dāng)然一般情況下,事情不會這么糟,但是你一定要記住這一點(diǎn)。
如果你使用多個(gè)daemons,需要在 smb.conf.global.<hostname>
中用主要的主機(jī)名代替 include directive %h參數(shù)。這將使你對每個(gè)主機(jī)/接口有一個(gè)獨(dú)立的文件。
轉(zhuǎn)到下一個(gè)文件, smb.conf.global.<hostname>
,你需要考慮的第一步是你要如何處理認(rèn)證。認(rèn)證指令有:安全、工作組和口令服務(wù)器。安全指令有四個(gè)選項(xiàng),但是我不準(zhǔn)備詳細(xì)描述它們的意義。如果你想要詳細(xì)了解這些選項(xiàng)的意義,可以參考 Samba 的文件: DOMAIN_MEMBER.txt
。首要的選項(xiàng)是 security=domain
,它提供最好的性能。主要的一點(diǎn)是在設(shè)置 security=domain
時(shí),Samba服務(wù)器完全在域中共享。它有一個(gè)機(jī)器帳號,可以通過域控制器的認(rèn)證請求,以及可以讓域控制器處理認(rèn)證。
繼續(xù)下去,口令服務(wù)器指令是在你認(rèn)證時(shí)需要的域控制器的名字。在Nortel中有些變化:前面我們有分離的機(jī)器資源域和用戶資源域。你必須能夠指定兩個(gè)域控制器,因?yàn)镾amba服務(wù)器必須使用 機(jī)器域進(jìn)行認(rèn)證,而用戶必須使用 用戶域進(jìn)行認(rèn)證。我不知道其它組織是怎么做的,但是我們把機(jī)器和用戶域合并為一個(gè)單獨(dú)的域,我們也移動到Active Directory。
你在多子網(wǎng)環(huán)境下需要使用WINS服務(wù)器,也為了進(jìn)行瀏覽。你并不需要真的使Samba服務(wù)器支持瀏覽,但是口令服務(wù)器指令處理IP地址。注意到這一點(diǎn)很重要:即使你提供了多個(gè)IP,它只使用第一個(gè)IP,從來不會使用其余的。
配置多網(wǎng)絡(luò)接口
為什么你要這么做?一個(gè)原因是管理每個(gè)獨(dú)立網(wǎng)絡(luò)接口的性能。 The ClearCase Administrator's Guide 討論了在不同的子網(wǎng)管理不同的ClearCase區(qū)域,這里隱含了不同的網(wǎng)絡(luò)接口。你可以限制Samba到服務(wù)器的一個(gè)可用的子網(wǎng)接口。在我們的實(shí)例中,我們使用不同的網(wǎng)絡(luò)接口進(jìn)行備份,因此沒有理由在備份接口上運(yùn)行Samba -- 沒有人愿意從那個(gè)位置訪問
示例
下面給出一些例子,以顯示你可以如何修改配置文件。例如,你可能想要在一些接口上運(yùn)行Samba,而不是在全部接口上運(yùn)行。在這個(gè)例子中,我選擇兩個(gè)私有地址,并使用 interfaces
指令來列出你想要訪問的接口。你需要第二個(gè)指令, bind interfaces only=yes
,來完成配置。Samba監(jiān)聽所有接口,因此你必須指定 bind interfaces only=yes
來限制它只監(jiān)聽在接口指令中列出的接口。
前面的例子僅僅需要在一些接口上有 smbd/nmbd
daemon,而不是全部。如果你正在使用多個(gè)daemon,一個(gè)(只有一個(gè)) smb.conf.global.<hostname>
文件必須在接口指令中包括loopback接口。使用與首要主機(jī)名對應(yīng)的 smb.conf.global.<hostname>
文件。其它的 smb.conf.global.<hostname>
文件需要 netbios
命名指令設(shè)置到主機(jī)的其它接口。圖7更加清楚地顯示,這里有一個(gè)主機(jī)名alpha,是首要的主機(jī)名,我們在接口指令中包括loopback接口。主機(jī)名beta是另外一個(gè)接口,它不是首要主機(jī)名,因此我們必須包括 netbios
命名指令beta.
|
圖 7: 配置 smb.conf.global.<hostname> |
如果你有 security=domain
,有多個(gè)接口,并且你運(yùn)行多個(gè)daemon,你需要對每個(gè)接口有一個(gè)機(jī)器帳號。你不能對于機(jī)器只使用一個(gè)帳號,因?yàn)?每個(gè)daemon都是獨(dú)立的,需要它們自己的機(jī)器帳號。問題是加入域的命令不允許你指定其它的配置文件。這里我提供了一些解決的例子,你可以通過重命名文件和使用符號鏈接來解決這個(gè)問題。一旦你加入了域,你就不需要維護(hù)主機(jī)的文件,因?yàn)閷?shí)際運(yùn)行的daemons可以讓你指定其它的配置文件。
配置共享
現(xiàn)在轉(zhuǎn)到你如何配置共享上, smb.conf.shares.<hostname>
文件包括一個(gè)單個(gè)共享的模板。很多參數(shù)不必要修改,因?yàn)樗鼈円呀?jīng)設(shè)置為缺省值或者推薦值。僅僅需要考慮的是 共享名 和 共享目錄路徑。下面是一些特殊的限制:
- 共享名要符合NetBIOS 命名限制,這意味著你只能使用字母和下劃線,并且最多14個(gè)字符。
- 如果你仍然使用Windows NT的話有一個(gè)Bug -- 如果共享名超過11個(gè)字符它將不會工作。
在進(jìn)行配置時(shí)要牢記這一點(diǎn),并考慮你的環(huán)境。
圖8列出了其它常用的各種指令。它們基本上都是自解釋的。如果你想要限制特定的機(jī)器或者特定的用戶訪問一個(gè)共享,可以使用 valid users
指令。我在實(shí)際中發(fā)現(xiàn) hosts allow
指令工作的不是很好,特別是在你使用DHCP或者是遠(yuǎn)程用戶的主機(jī)名變更時(shí)。 最好使用valid users,因?yàn)檫@樣的話,如果用戶挪到不同的機(jī)器上時(shí),用戶仍然可以訪問數(shù)據(jù)。
|
圖 8: 配置 smb.conf.shares.<hostname> 文件 |
與用戶名和密碼相關(guān)問題
現(xiàn)在我要扯得遠(yuǎn)一點(diǎn)。我在這里假定你已經(jīng)設(shè)置了一個(gè)類似的協(xié)同環(huán)境。保證在Windows下和UNIX下有相同的用戶名是很重要的。另外一個(gè)重要的考慮是 lmhosts
文件。這個(gè)文件Samba用來解析NetBIOS名。正常情況下,WINS服務(wù)器可以用來進(jìn)行這個(gè)工作,但是根據(jù)我們的經(jīng)驗(yàn), WINS服務(wù)器的架構(gòu)并不是很穩(wěn)定和可靠。事實(shí)上,我們經(jīng)常能夠碰到WINS服務(wù)器出問題給我們帶來的麻煩。一個(gè)解決這個(gè)問題的方法就是在 Samba 服務(wù)器上使用 lmhosts
文件。 lmhosts
主要列出你要訪問的域控制器。這也許相當(dāng)安全,因?yàn)橛蚩刂破鞑⒉唤?jīng)常修改主機(jī)名或者IP地址。修改域控制器的主機(jī)名和IP地址會導(dǎo)致Windows環(huán)境的崩潰。在客戶端創(chuàng)建同樣的 lmhosts
文件以避免類似問題也是值得的。我給出Windows下的 lmhosts
文件的路徑(在問題解答節(jié)有更詳細(xì)的討論)。
username.map
文件是一個(gè)把Windows帳號映射到UNIX中不同的名字的一種方法。它的首要用途是把Windows的ClearCase ALBD服務(wù)帳號映射到UNIX的有效帳號。缺省的ALBD用戶是clearcase_albd,它的名字很長,你不能在UNIX環(huán)境下看到。在過去,用戶名超過8個(gè)字符將導(dǎo)致問題。在現(xiàn)在的很多系統(tǒng)中,它一點(diǎn)也不會導(dǎo)致問題,但是這一點(diǎn)你要記住。一個(gè)可能的解決方案是把clearcase_albd帳號映射成VOB所有者帳號,因?yàn)槟阒?,VOB所有者有權(quán)訪問VOB對象和VOB元素。
另一個(gè)方法是創(chuàng)建一個(gè)與VOB所有者帳號同名的ALBD服務(wù)帳號,但是我不建議這樣做,因?yàn)榭赡軐?dǎo)致安全問題。如果有人能夠作為VOB所有者帳號登陸到Windows,那么他就可以進(jìn)入VOB做任何VOB所有者想做的事情,這可能是一個(gè)很不好的事情。
最后一個(gè)選擇的方法是我們使用的方法:創(chuàng)建一個(gè)與VOB所有者帳號類似的ALBD服務(wù)帳號。例如,如果VOB所有者帳號是vobadm,你可以使用vobadm01。如果 有人以vobadm01登陸,他不能做任何事情,因?yàn)樗皇荲OB所有者帳號。
要記住的一點(diǎn)是,這種映射僅僅用于訪問cleartext 和source containers,這就是ALBD 服務(wù)為你做的事情。它并不處理正常的 ClearCase訪問控制。如果有人以vobadm01登陸并試圖check out文件,它并不映射為vobadm帳號,仍然是vobadm01帳號。
很多組織正在轉(zhuǎn)到大的、合并的環(huán)境,就像我們那樣。我們把幾個(gè)擁有他們自己服務(wù)器的組合并成一個(gè)單一的一組服務(wù)器。在這種情況下,可能有多個(gè)VOB所有者帳號、多個(gè)開發(fā)環(huán)境和多個(gè)項(xiàng)目。這時(shí)進(jìn)行帳號映射有一點(diǎn)困難。記住你可以把多個(gè)帳號映射到一個(gè)單一的UNIX帳號。
你不能把一個(gè)ALBD服務(wù)帳號映射到多個(gè)VOB所有者帳號。在下面的例子中我試圖把a(bǔ)lbd1映射到三個(gè)不同的帳號,只有最后一個(gè)被映射。在圖9的例子中,我試圖把ALBD帳號albd1 映射到vobadmin、ccadmin和 vobadmcc。然而,albd1帳號只能映射到vobadmincc (最后一個(gè)定義)。使用vobadmin和ccadmin訪問將出現(xiàn)問題,因?yàn)閍lbd1映射到vobadmcc。
|
圖 9: 你不能把多個(gè)VOB所有者帳號映射到單個(gè)ALBD服務(wù)帳號 |
關(guān)于ALBD服務(wù)帳號的密碼更新有一些附加的考慮。在我們的環(huán)境中,公司的安全策略需要所有帳號的口令每6個(gè)月就到期。我們不能得到豁免。當(dāng)然,如果你的ALBD服務(wù)帳號不工作將會出現(xiàn)問題,你的用戶都會down掉。因此我們不得不找到一種處理這個(gè)策略的方法。如果你的ALBD帳號永不過期,那當(dāng)然很好。如果你做不到,那你就應(yīng)該知道,如果ALBD帳號過期或者被鎖定,將有很多用戶 down掉。
按照規(guī)定,我們必須面對ALBD密碼過期的限制。我們使用ALBD服務(wù)帳號索引的方法來保持跟蹤ALBD服務(wù)帳號。當(dāng)密碼快要到期時(shí),我們準(zhǔn)備了第二個(gè)帳號,這個(gè)帳號的密碼是新的,再過6個(gè)月才會到期。然后我們在舊的帳號密碼還 有效的時(shí)候,把帳號切換到新的ALBD服務(wù)帳號上。這樣做的好處是,如果我們切換過去后,其它帳號過期后只會影響很少的用戶,帶來最小的損失。然后,你可以告訴受到影響的用戶:“你需要更新你的ALBD服務(wù)帳號”。帳號過期只會給沒有更新的人帶來一點(diǎn)影響。
如果你使用了帳號索引,記住需要重新配置 username.map
文件。在你切換帳號的時(shí)候這一點(diǎn)很重要,你也必須更新Samba。如果你忘記更新 username.map
文件。你將出現(xiàn)訪問的問題。
從Samba 2.0.x升級到Samba 2.2.x
Samba 2.0.7是上一個(gè)穩(wěn)定版本,現(xiàn)在2.2 stream已經(jīng)發(fā)布。2.2 stream有幾個(gè)性能的問題,直到2.2.7。一個(gè)問題是Solaris平臺的,即使當(dāng)前的發(fā)布版本仍有問題,你需要一些補(bǔ)丁來避免CPU高利用率的問題。這個(gè)問題的原因是他們修改了他們管理鎖的方法。從使用共享內(nèi)存改為了使用他們自己的文本數(shù)據(jù)庫。這個(gè)文本數(shù)據(jù)庫使用 fcntl
系統(tǒng)調(diào)用和 F_SETLK
來管理鎖。在鎖的數(shù)量增加時(shí)性能呈指數(shù)降低。我沒有實(shí)際碰到這個(gè)問題,因?yàn)槲覐膩頉]有使用過Samba 2.2.2,但是我曾經(jīng)在mailing list中看到過有人碰到過CPU利用率非常高的問題。一旦你的CPU利用率超過75%,一定是一個(gè)問題。所有的Solaris版本都有解決這個(gè)問題的補(bǔ)丁,因此我建議你使用這些補(bǔ)丁。
我應(yīng)該使用哪個(gè)版本的Samba? 除了Solaris,你應(yīng)該使用最新的穩(wěn)定版本,目前是2.2.8a。如果你使用了圖10的補(bǔ)丁,可以繼續(xù)使用2.2.8。如果基于某種原因你不能使用這些補(bǔ)丁,你可以選擇2.0.10a。
|
圖 10: Samba Solaris 補(bǔ)丁 |
2.2.8a的配置有一些不同,一些以前獨(dú)立的文件被合并成一個(gè)新的文件。有兩個(gè)文件,機(jī)器帳號密碼文件(類似于 <domain name>.<hostname>.mac)和 machine.SID
文件(包含安全標(biāo)識符)。在我的附加文章, SCM04.pdf,中給出了關(guān)于如何安裝新版本的Samba、創(chuàng)建新的目錄結(jié)構(gòu)和拷貝舊的配置文件的指導(dǎo)。私有目錄包括機(jī)器帳號密碼和機(jī)器SID文件。如果你使用共享的 mem size
指令的話,你也需要修改配置文件。這個(gè)指令在 2.2中取消了,因此你必須注釋掉這個(gè)指令。如果你不修改也沒有任何問題,只是會在日志中收到一個(gè)錯(cuò)誤信息。
你需要做的其它事情是--因?yàn)樵?.2.x日志的行為改變了-設(shè)置調(diào)試級別為1以便你得到更多的日志信息。如果你沒有設(shè)為1,你只能在你的日志中看到錯(cuò)誤信息。有時(shí)在你想詳細(xì)跟蹤問題時(shí),你可能需要有關(guān)連接和用戶如何登陸的信息。你當(dāng)然可以在錯(cuò)誤發(fā)生后設(shè)置這個(gè)級別,但是你就失去了得到信息的機(jī)會。你不得不等到錯(cuò)誤再次出現(xiàn)或者有用戶試圖登陸。如果你先進(jìn)行設(shè)置,將很容易得到信息。
在你準(zhǔn)備切換Samba時(shí),完成以下步驟:
- 停止 Samba.
- 重命名目錄
- 最后更新私有目錄。(香我說得那樣,這個(gè)機(jī)器帳號密碼每周更新,但你不知道它什么時(shí)候更新,即使你十分鐘前拷貝了,它有可能十分鐘后更新。你只能確保它盡可能的新)
- 重起 Samba.
這個(gè)切換過程小于5分鐘,很容易換回來。
一旦完成切換,你最好驗(yàn)證一下是否工作正常。你可以登陸到客戶端,連接VOB。更容易的方法是在UNIX機(jī)器上使用 smbclient
命令(它是Samba發(fā)布的一部分)來連接一個(gè)共享UNIX。在Windows機(jī)器上,可以在命令行輸入net use命令。如果連接失敗,你可以切換回來,查看日志文件以確認(rèn)問題的原因。
我們在升級時(shí)發(fā)現(xiàn)了三個(gè)問題。第一個(gè)問題是在日志消息中顯示Samba試圖修改信任帳號密碼失敗。問題是在 2.0.7的配置移植到2.2.x時(shí),它并不在文本數(shù)據(jù)庫中創(chuàng)建用來改變密碼的key。Samba服務(wù)器仍然繼續(xù)工作,也不影響性能。這是一個(gè)潛在的安全問題,因?yàn)槟愕臋C(jī)器帳號密碼沒有改變,但它并不是一個(gè)嚴(yán)重的問題。一個(gè)解決的方法是刪除和重建機(jī)器帳號,然后重新加入服務(wù)器。這將是破壞性的,因?yàn)樗械恼J(rèn)證在你刪除帳號時(shí)都將失敗,你的用戶都會中斷。然后,你必須重新創(chuàng)建一個(gè)機(jī)器帳號,并重新把Samba服務(wù)器加入到域。我的替代方法是在一個(gè)測試服務(wù)器上創(chuàng)建了一個(gè) secrets.tdb
文件,包括那個(gè)key。文件中有其它數(shù)據(jù),但是在服務(wù)器移植數(shù)據(jù)時(shí)將覆蓋。這個(gè)方法似乎更容易一些。
我們看到的第二個(gè)問題是在從2.2.5升級時(shí)。你啟動服務(wù)器,但是你不能連接。當(dāng)你查看日志文件時(shí),你看到不能取得信任帳號密碼的消息。這個(gè)問題是Key的儲存信息被破壞了。這是一個(gè)二進(jìn)制文件,因此你不能編輯和修復(fù)它。最容易的方法是停止Samba。你也可以把信息轉(zhuǎn)儲到 secrets.tdb
文件,或者從舊的安裝復(fù)制數(shù)據(jù)以創(chuàng)建 <domain>.<hostname>.mac
文件。在CD上,我也提供了一個(gè)小程序用來更容易地轉(zhuǎn)儲 secrets.tdb
文件。一旦你重新創(chuàng)建了 <domain>.<hostname>.mac
文件,Samba服務(wù)器將把它合并到 secrets.tdb
并創(chuàng)建正確的key。這個(gè)問題可能只有少數(shù)人會遇見。
最后一個(gè)問題更加困難一些。在升級后,Samba 不能夠正確的解析UNIX文件系統(tǒng)的符號連接。不幸的是,我們只在一臺機(jī)器上看到這個(gè)問題,并且我不能重現(xiàn)這個(gè)錯(cuò)誤。我用同樣的補(bǔ)丁和相同的配置,但是沒有一點(diǎn)問題。你可以看到一個(gè)錯(cuò)誤"not a valid win32 application" 或者"unable to run exec format error"。在這個(gè)例子中,我們試圖訪問文件 syee_test1.bat
,因?yàn)槿罩疚募械腻e(cuò)誤消息顯示遺漏了部分路徑。這個(gè)問題極其罕見,但是你在升級時(shí)要記住。在升級后你需要檢查一下符號連接是否正常工作。
Samba 和 Rational ClearCase的問題與解決
日志文件是你的好朋友;你可以從那里得到大量信息,因此你顯然應(yīng)該知道如何增加調(diào)試的級別。調(diào)試級別可以從0設(shè)到10。0表示幾乎沒有細(xì)節(jié)信息,10表示有最多的細(xì)節(jié)。有兩種方法改變調(diào)試級別。一種方法是修改 smb.conf
文件,改變指令,然后停止再重起Samba。另一種方法是傳遞 HUP信號到Samba daemon。如果你傳遞了一個(gè)HUP信號,只有新的連接才能有新的調(diào)試級別。我不經(jīng)常使用這個(gè)方法,因?yàn)樗绊懰械?Samba 客戶端。在你調(diào)試時(shí),你通常只想調(diào)試特定的客戶端。要想調(diào)試一個(gè)客戶端,我就進(jìn)入日志找到特定客戶端的進(jìn)程ID
我使用一個(gè)配置文件進(jìn)行設(shè)置,模板中有日志文件中包括的進(jìn)程ID。這個(gè)配置文件已經(jīng)使用了很長時(shí)間,大約進(jìn)行了7、8次修改。我增加信息和選項(xiàng)以便對任何類型的問題都能很容易地調(diào)試。在圖11的例子中,PID 是 4539,對2.0 stream,你給進(jìn)程發(fā)一個(gè)信號。你發(fā)一次信號只能增加一個(gè)調(diào)試級別。如果你想增加2或3個(gè)級別,你只能發(fā)2到3次信號。對于 2.2.x,他們包括一個(gè)實(shí)用程序可以讓你設(shè)置任何級別,這會更容易一些。
|
圖 11: 調(diào)試Samba |
圖12顯示我經(jīng)常碰到的錯(cuò)誤。我曾經(jīng)在一個(gè)ClearCase 用戶組看到這個(gè)問題。這大概是你最常碰見的問題:你得到一個(gè)信息:"Unable to construct cleartext for object X in VOB Error: Type manager 'text_file_delta' failed construct_version operation." 這幾乎都?xì)w結(jié)為許可問題。有意思的是你能夠碰到多少種許可問題。另一個(gè)用戶經(jīng)常碰到的問題是,錯(cuò)誤消息:"incorrect function",經(jīng)常可以在視圖日志和視圖主機(jī)上看到。這個(gè)信息也可以在彈出式對話框中出現(xiàn)。
|
圖 12: 最常見的錯(cuò)誤 |
我們怎么樣才能跟蹤到問題在什么地方?你需要做的第一件事情就是,你需要知道ALBD 服務(wù)帳號名。你可以通過services控制面板找到它。然后你問自己, 這個(gè)服務(wù)帳號是否有相應(yīng)的UNIX帳號? 如果是,你可以進(jìn)行下一步。如果沒有,它大概被映射了,因此你要查看 username.map
文件。如果那里沒有,你要加上它。在你加上以后,新的連接將使用新的值,但是已經(jīng)存在的連接則不會。有問題的客戶端應(yīng)該與VOB斷開,等幾分鐘到Samba連接刪除,然后再連接到VOB。讓用戶啟動一次很容易。當(dāng)然你也可以停止然后重新啟動Samba,但是這樣要影響所有用戶,而不是只影響有問題的用戶。
UNIX帳號是否有權(quán)限?這里假定ALBD服務(wù)有一個(gè)UNIX帳號,或者映射了合適的帳號。 這個(gè)帳號能否訪問VOB存儲目錄和子目錄? 我看過很多次,他們的VOB目錄的UNIX權(quán)限類似700或者 750,這將使得只有很少的用戶可以訪問VOB中的數(shù)據(jù)。解決的方法很簡單,給VOB目錄設(shè)置正確的權(quán)限。如果問題在pool自己身上,你必須使用 cleartool protectvob
命令來修正。你一定不想用UNIX命令來修改這一堆權(quán)限。
其它的事情也會發(fā)生,比如你基于某種原因,你限制了某些組的權(quán)限。你必須保證由ALBD使用的UNIX帳號在正確的組中。如果你遇見了問題,你要修改權(quán)限或者把用戶添加到正確的組中。
訪問VOB或者訪問共享的難點(diǎn)
即使上面的都可以通過,你仍然會遇到不能訪問VOB數(shù)據(jù)的問題。有很多其它的因素會導(dǎo)致錯(cuò)誤。典型地,你下一步需要做的是,增加調(diào)試級別,以便得到更多的相關(guān)信息。我通常做的第一步是不通過ClearCase,試著訪問共享目錄,以保證網(wǎng)絡(luò)部分工作正常。我使用net use命令試著訪問共享。在這里你肯定希望看到錯(cuò)誤。如果用戶指定了錯(cuò)誤的密碼,你可以在Samba日志中清楚地看到。它說:"NT_STATUS_WRONG_PASSWORD"。這經(jīng)常發(fā)生在用戶剛剛修改了密碼但是沒有重新登陸時(shí)。解決方法很簡單,退出并重新登陸。
如果用戶修改了密碼并用錯(cuò)誤的密碼試圖登陸很多次后,用戶帳號可能被鎖定。日志中的錯(cuò)誤消息也很明顯地指出,帳號被鎖定。你只需要等幾分鐘,到帳號釋放,或者如果它不工作你問用戶是否重設(shè)了他們的密碼。
一個(gè)很難調(diào)試的權(quán)限的限制是,如果你使用了 valid users
或者h(yuǎn)osts allow 指令,這些指令我在前面提過,它們只允許特定的用戶或者主機(jī)連接。如果你在使用net use命令要求輸入密碼時(shí)輸入了正確的密碼,但是命令仍然失敗,你就必須查看共享配置文件,看是否限制了共享。如果有共享的限制,你就需要研究哪些用戶或者機(jī)器有權(quán)限。你必須增加調(diào)試級別到5級才能看到這個(gè)錯(cuò)誤。
在圖13的例子中, smbd
daemon 在SUPPORT_USERS中尋找我的userid, boehm。我的userid沒有在組中,因此我沒有訪問共享的權(quán)限。
|
圖 13: VOB 和共享訪問權(quán)限 |
其它可能發(fā)生的事情有-- 有意或者無意的 -- 用戶帳號被刪除或者不存在。這時(shí)我試圖訪問一個(gè)共享時(shí),他們將做為用戶 "nobody",沒有訪問共享的權(quán)限,然后操作將失敗。你可以在日志中看到錯(cuò)誤指示(圖14),boehm-1做為nobody連接到服務(wù)器ccaserls。代替用戶boehm,它用nobody。這就是一個(gè)UNIX帳號丟失的例子。
|
圖 14: 用戶帳號不存在或者被刪除 |
我們在使用WINS服務(wù)器時(shí)仍然會遇到其它問題。用戶可能訪問VOB,工作得很好,突然,他們不能訪問VOB了。我們發(fā)現(xiàn)這時(shí)WINS服務(wù)器可能出問題了,或者我們從WINS服務(wù)器中得到錯(cuò)誤的VOB服務(wù)器的入口。這一點(diǎn)很糟糕,我們的解決方法是,雖然不是很好的方法, 在客戶端創(chuàng)建包括VOB 服務(wù)器入口的 lmhosts
文件。這可以幫助加速訪問VOB服務(wù)器,因?yàn)榭蛻舳瞬恍枰却齏INS告訴它VOB服務(wù)器的地址。另外,這時(shí)不應(yīng)該頻繁改變VOB服務(wù)器的主機(jī)名或者IP地址。這個(gè)方法的不利之處就是如果你在每個(gè)客戶端都創(chuàng)建文件的話,工作量將會很大,而且你必須保證新的客戶端也能很好地更新。我們可以把這個(gè)問題放到ClearCase的安裝過程中,作為其中的一步。在安裝時(shí)創(chuàng)建正確的入口文件。
你需要?jiǎng)?chuàng)建的文件位于 %SystemRoot%\SYSTEM32
目錄。這個(gè)目錄下有一個(gè)示例 lmhosts.sam
文件。在圖15中,我給出了我以前用過的 lmhosts
文件,#PRE 告訴機(jī)器把主機(jī)名預(yù)先加載到緩存中,這樣可以更快一點(diǎn)。
|
圖 15: 一個(gè)lmhosts文件的示例 |
另外一個(gè)你可能遇見的錯(cuò)誤是Samba服務(wù)器機(jī)器帳號損壞。這時(shí),如果你使用 net use
命令登陸,你輸入正確的密碼,但是仍然不工作,你可以在日志文件中看到類似"NT_STATUS_NO_TRUST_SAM_ACCOUNT" 或者 "NT_STATUS_ACCESS_DENIED"的信息。這個(gè)問題稍微大一些,因?yàn)樗绊懰械挠脩?,不僅僅影響一個(gè)客戶端。這時(shí)你一般在域控制器上沒有任何權(quán)限來修復(fù)機(jī)器帳號,這時(shí)必須設(shè)置'security=server'直到你可以得到一個(gè)修復(fù)的帳號。一旦修復(fù),你可以重新加入域,然后重起Samba。這一般需要導(dǎo)致2-3分鐘的不可用。
最后一個(gè)錯(cuò)誤是你不應(yīng)該看見的。"Out of file structures" 錯(cuò)誤在使用32-bit Samba時(shí)試圖打開太多文件時(shí)經(jīng)常發(fā)生。如果你使用了64-bit Samba 和版本2.2.x的話,你不應(yīng)該看到這個(gè)錯(cuò)誤。
需要注意的一點(diǎn)是Rational的文檔仍然設(shè)置mnodes到800。我曾經(jīng)設(shè)置過更多的值沒有任何問題。
解決這個(gè)問題的方法是增加'max open files' 并使用64-bit Samba。如果你使用32-bit Samba,增加'max open files'的值沒有用處。如果你不能使用64-bit Samba,那你就不得不減少mnode設(shè)置。在ClearCase 控制面板下的 MVFS performance可以修改。你可以從800開始。你甚至可以減少到200。如果你仍然有問題,就像我最初開發(fā)這個(gè)補(bǔ)丁時(shí)那樣,你就必須使用64-bit版本的Samba。
最后一個(gè)問題更加罕見,或者應(yīng)該罕見。Samba 2.0使用共享內(nèi)存表管理鎖。在有100-200個(gè)客戶端時(shí)很容易超出這個(gè)表的大小。缺省的大小大約是1M。在我使用的配置文件中,我把它設(shè)置為4M。即使這樣,一旦你超過了100個(gè)客戶端或者更多,它很容易超出4M的水平,然后你將會看到類似"panic error, delete share mode hash bucket empty"的信息。這特別令人沮喪,因?yàn)橛脩魧l(fā)現(xiàn)他們前面還能讀的文件現(xiàn)在不能讀了。他們可能重起他們的機(jī)器或者重起他們的視圖。然后他們可以讀這個(gè)文件,但是他們又不能讀以前可以讀的其它文件了。這依賴于共享內(nèi)存多快地填滿,以及他們在填滿的時(shí)刻訪問哪個(gè)文件。
解決的方法是增加共享 mem size
指令。當(dāng)然這是在2.0,在2.2中應(yīng)該沒有這個(gè)問題。如果你增加了這個(gè)參數(shù),你或許必須增加kernel參數(shù)。Solaris的kernel參數(shù)是 shmsys:shminfo_shmmax
。HP-UX有類似的設(shè)置。為了讓改變的kernel參數(shù)生效,你必須重起系統(tǒng),這將更糟糕。
如果由于某些原因,你設(shè)置kernel參數(shù)足夠高,你需要知道的一件事情是,如果你修改了它的大小,你必須刪除存在的共享內(nèi)存。這是由于Samba代碼會看內(nèi)存表是否在,如果找到共享內(nèi)存,它將試圖使用錯(cuò)誤的大小。圖16顯示移去共享內(nèi)存的命令。
|
圖 16: 增加共享內(nèi)存大小的指令 |
回頁首
問題與解答
如果你不能使用64-bit Samba的話該怎么辦?
解決方法是打開Rational ClearCase 控制面板。有一個(gè)名為 MVFS Performance的tab,有兩個(gè)檢查框( maximum number of mnodes to keep in the VOB free list 和 maximum number of mnodes to keep for the cleartext free list)。你可以手工把它們改為800,你必要時(shí)可以減少到200。
你的Samba配置的例子是Windows NT-centric。在Active Directory環(huán)境下有什么變化?
問題是關(guān)于在Active Directory 環(huán)境下的PDC (主域控制器) 和 BDC (后備域控制器)的。
我不知道你需要的改變 -- 我的意思是,你在Active Directory中仍然有域控制器,因此你仍然需要有密碼服務(wù)器,不管你的active directory服務(wù)器在哪里。我不知道Active Directory中是否仍然使用WINS服務(wù)器。但我相信它仍然使用。因此你即使在active directory環(huán)境下仍然需要這些信息。
Samba日志保存在什么目錄?
如果安裝在/usr/local/samba,日志文件在/usr/local/samba/var。日志文件名為 log.<machine name>
.
在多個(gè)ALBD帳號時(shí)我們?nèi)绾翁幚砻艽a過期?
我們有我們自己的工具更新客戶端,但是最容易通用安裝方法是到發(fā)布區(qū)域更新 sitedefs.dat
文件,這個(gè)文件包含加密的密碼。你也可以再次運(yùn)行 siteprep.exe
,提供一個(gè)新的密碼。它會更新文件,然后用戶重新安裝ClearCase以更新密碼
64-bit Samba 是否需要64-bit 操作系統(tǒng)?
是的。你必須運(yùn)行在Solaris 7 (64-bit)及以上,或者HP-UX 11.
如果你運(yùn)行64-bit Linix 是否會出現(xiàn)問題?
不會,因?yàn)長inux不會碰見這個(gè)問題。它們的設(shè)置不同,在LINUX下使用 fopen
系統(tǒng)調(diào)用時(shí)不會遇到這個(gè)問題,有一些kernel調(diào)整可以讓你設(shè)置Linux 允許打開足夠的文件。
緩存問題 -- 服務(wù)器數(shù)據(jù)已經(jīng)變更,但是客戶端幾分鐘后才能看到
問題是有人在Solaris服務(wù)器上進(jìn)行了變更,但是客戶端直到幾分鐘后才能看到。這個(gè)問題可能是配置文件的問題,在我的配置文件中有一個(gè)選項(xiàng)op locks,ClearCase使用 op locks=Off
。它會緩存一些東西,有可能導(dǎo)致問題。我不知道你的設(shè)置是什么,但這是我要解決問題的第一個(gè)猜想。
如果你有用戶登陸到多個(gè)windows域,多daemons是否需要考慮這個(gè)問題?
可以有一種方法處理。我們在我們的環(huán)境中有多個(gè)daemons,但是我們不需要尋址它們因?yàn)樵诓煌挠蛑g有信任關(guān)系。你的問題可能是一個(gè)域中的人試圖登陸,但他們不能認(rèn)證,如果他們引用了錯(cuò)誤的域控制器(那里他們的帳號不存在,即使有信任關(guān)系)。一個(gè)解決方法是在一個(gè)域中有一個(gè)機(jī)器帳號接口,另一個(gè)域中有另外一個(gè)機(jī)器帳號接口。
我怎么處理UNIX帳號同步?
這不是一個(gè)問題,因?yàn)樗械腢NIX帳號都通過NIS處理。如果一個(gè)UNIX改變了,它由NIS處理。認(rèn)證并不真正發(fā)生在UNIX一邊。如果我做為用戶boehm連接到Samba服務(wù)器,它只是在UNIX邊看用戶是否存在。如果存在,它就通過域控制器的認(rèn)證請求,從來不會涉及UNIX一邊。
有人看到這樣的Samba問題,在用戶增加是,他們不得不停止并重起Samba?
我從來沒有見到這樣的問題。我知道在早于2.2的版本會有一些問題。我相信在2.2.8a版本已經(jīng)修正了問題。如果你仍然有這樣的問題,我不知道如何幫你。它可能與操作系統(tǒng)有關(guān),但我知道在早于2.2的版本有內(nèi)存泄漏。
你是否認(rèn)為Samba比TAS要好?
是的。我考慮過TAS。我想我不喜歡license費(fèi)用。我們的組織有其它部門是用過TAS,其中一個(gè)站點(diǎn)出現(xiàn)問題。他們不能正確地認(rèn)證用戶,因?yàn)樗麄儧]有權(quán)限。我們聯(lián)系技術(shù)支持,但是我們沒有從他們那里得到滿意的結(jié)果。上千個(gè)用戶不能正常工作。幸運(yùn)的是,我們能夠在幾分鐘內(nèi)切換到Samba。我花時(shí)間創(chuàng)建了配置文件。我們切換過去,他們很高興。我們最近在巴西也遇到類似的事情,那里的TAS也不能正常工作,出一些奇怪的現(xiàn)象。我們又一次不能從技術(shù)支持那里得到結(jié)果,因此我們切換到Samba,然后就很好了。
在我的觀點(diǎn)中Samba好一點(diǎn)的另一件事情是: valid users
和 hosts
。我可以使用NIS netgroups確定誰可以訪問我的服務(wù)器。在TAS中你不得不在每個(gè)TAS服務(wù)器上手工編輯所有用戶ID的列表。在RTP,我有8臺服務(wù)器。我不想早服務(wù)器上編輯8個(gè)文件,并保持他們的同步。
在客戶端使用PC NFS 并確定哪個(gè)協(xié)議用來訪問VOB服務(wù)器時(shí)是否會有問題?
不會的,ClearCase文檔中寫的很清楚。我相信它能夠告訴你如何確定。你要做的是進(jìn)入服務(wù)控制面板,找到properties,那里有服務(wù)提供的瞬息。它看起來可能是"Microsoft Windows Network", "Hummingbird Network",如果你使用Hummingbird Maestro,會有一些其它選項(xiàng)。你可以改變協(xié)議的順序,以便你可以把"Microsoft Windows Network"放在NFS協(xié)議前面,這樣將使用Samba代替NFS。我在調(diào)試問題的時(shí)候做過類似的事情:我想要強(qiáng)制使用NFS,因此我改變順序,把NFS放在Microsoft Windows Network前面。
Samba服務(wù)器的容量如何?
我們有的最大的一個(gè)前面已經(jīng)講過。我們在加拿大有一個(gè)單一的機(jī)器為大約上千人服務(wù)。大概600或者更多的人是Samba 或者PCs 或者Samba 用戶。它是一臺Enterprise 6500,擁有8個(gè)處理器。我從來沒有碰見用戶數(shù)太多不能支持的Samba問題。我傾向于使用多個(gè)VOB服務(wù)器因?yàn)槲蚁矚g配置更好的性能。這樣我通常有2-4個(gè)服務(wù)器每個(gè)支持幾百個(gè)用戶。我在使用這個(gè)配置的時(shí)候從來沒有遇見Samba的性能或者容量問題。
我可以把Samba放到VOB服務(wù)器上嗎?
是的,你可以這么做。
關(guān)于作者
Stephen Beneteau 是Rational軟件的軟件開發(fā)人員, Rational軟件是IBM Software Group 的幾個(gè)品牌之一。IBM 是世界上最大的信息技術(shù)公司和最大的商業(yè)和技術(shù)服務(wù)供應(yīng)商。Rational 軟件在開放的業(yè)界標(biāo)準(zhǔn)工具,最佳實(shí)踐和商業(yè)應(yīng)用開發(fā)服務(wù),軟件產(chǎn)品和系統(tǒng)構(gòu)建,包括嵌入式設(shè)備軟件如蜂窩電話和醫(yī)療器械等方面每年提供$90億的收益。