当前位置:Linux教程 - Samba - samba - SMB的扩展应用

samba - SMB的扩展应用

SMB的扩展应用
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

  在Linux风行的今天,与Windows机器相互共享文件已经是非常普遍的应用了,关于samba的设置的文档也相当的多,本站也有不少了。不过在使用它的高级功能方面还是比较欠缺的,这类文档是非常稀有的,而且只有英文版的,为了方便国内的Linux用户,我将这些文档整理一下,翻译过来,并结合自己一些经验,为大家提供一些帮助。
  注:这篇文章并不是一篇关于如何配置samba的基础文档,而是需要阅读者有一定的Linux使用经验,熟悉脚本语言,并且对samba有一定的使用经验。主要是针对于一些企业的Linux网管,或比较有经验的Linux爱好者。
  这篇文章也其说是文章,不如说是一个技巧提示,但是我个人觉得它意义非常大,特别是对于大中型企业的用户来讲,它可能非常重要。
  它主要描述了如果在Linux下使用samba来为使用Windows系统的机器作备份,并且描述了如何跨子网共享samba。
1、将Windows机器备分到一台Linux主机上
  Adam Neat(adamneat@ipax.com.au),向我们提供了以下一段代码,它描述了如何使用smbclient软件包将windows机器备份到Linux主机上。Adam说它可以用来备份windows 3.x和NT机器到一台Linux的磁带机上。
  另一段代码,是Dan Tager (dtager@marsala.com),提供的,Dan的脚本是通过rsh来备份Unix机器,尽管它可以修改成ssh以便使其更简单些。
  在下面这个脚本中,字符串“agnea1”是作备份工作的Linux主机的一个用户名。
#!/bin/bash clear echo Initialising ... checkdate=`date | awk '{print $1}'`
if [ -f "~agnea1/backup-dir/backup-data" ]; then echo "ERROR: No config file for today!" echo "FATAL!" exit 1 fi
if [ -d "~agnea1/backup-dir/temp" ]; then echo "ERROR: No tempoary directory found!" echo echo "Attempting to create" cd ~agnea1 cd backup-dir mkdir temp echo "Directory Made - temp" fi
if [ "$1" = "" ]; then echo "ERROR: enter in a machine name (ie: cdwriter)" exit 1 fi
if [ "$2" = "" ]; then echo "ERROR: enter in a SMB (Lan Manager) Resource (ie: work)" exit 1 fi
if [ "$3" = "" ]; then echo "ERROR: enter in an IP address for $1 (ie: 130.xxx.xxx.52)" exit 1 fi ######################################################### # Main Section # #########################################################
cd ~agnea1/backup-dir/temp rm -r ~agnea1/backup-dir/temp/* cd ~agnea1/backup-dir/
case "$checkdate" in Mon) echo "Backuping for Monday" cat backup-data | /usr/local/samba/bin/smbclient $1$2 -I$3 -N echo "Complete" if [ -d "~agnea1/backup-dir/Monday" ]; then echo "Directory Monday Not found ... making" mkdir ~agnea1/backup-dir/Monday fi
echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf monday.tar *echo "done ..." rm ~agnea1/backup-dir/Monday/monday.tar mv monday.tar ~agnea1/backup-dir/Monday ;;
Tue) echo "Backuping for Tuesday" cat backup-data | /usr/local/samba/bin/smbclient $1$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Tuesday" ]; then echo "Directory Tuesday Not found ... making" mkdir ~agnea1/backup-dir/Tuesday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf tuesday.tar * echo "done ..." rm ~agnea1/backup-dir/Tuesday/tuesday.tar mv tuesday.tar ~agnea1/backup-dir/Tuesday ;;
Wed) echo "Backuping for Wednesday" cat backup-data | /usr/local/samba/bin/smbclient $1$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Wednesday" ]; then echo "Directory Wednesday Not found ... making" mkdir ~agnea1/backup-dir/Wednesday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf wednesday.tar * echo "done ..." rm ~agnea1/backup-dir/Wednesday/wednesday.tar mv wednesday.tar ~agnea1/backup-dir/Wednesday ;;
Thu) echo "Backuping for Thrusday" cat backup-data | /usr/local/samba/bin/smbclient $1$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Thursday" ]; then echo "Directory Thrusday Not found ... making" mkdir ~agnea1/backup-dir/Thursday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf thursday.tar * echo "done ..." rm ~agnea1/backup-dir/Thursday/thursday.tar mv thursday.tar ~agnea1/backup-dir/Thursday ;;
Fri) echo "Backuping for Friday" cat backup-data | /usr/local/samba/bin/smbclient $1$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Friday" ]; then echo "Directory Friday Not found ... making" mkdir ~agnea1/backup-dir/Friday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf friday.tar * echo "done ..." rm ~agnea1/backup-dir/Friday/friday.tar mv friday.tar ~agnea1/backup-dir/Friday ;;
*) echo "FATAL ERROR: Unknown variable passed for day" exit 1;;
esac ########### ______________________________________________________ 这里是Dan的备份脚本: ______________________________________________________ #!/bin/bash
BACKDIR=3D/backup WINCMD=3D/usr/bin/smbclient
function CopyWinHost(){
# tars and gzips "windows shares" to a local directory using samba's # smbclient # argument 1 is the remote host window's host name # argument 2 is the share name to be backed up
echo $1,$2,$3 REMOTE=3D$1 SHARE=3D$2 DEST=3D$3
# create a tarred gzip file using samba to copy direct from a # windows pc # 12345 is a password. Needs some password even if not defined on # remote system $WINCMD $REMOTE$SHARE 12345 -Tc -|gzip > $DEST echo `date`": Done backing up "$REMOTE" to "$DEST echo }
function CopyUnixHost(){
# tars and gzips a directory using rsh # argument 1 is the name of the remote source host # argument 2 is the full path to the remote source directory # argument 3 is the name of the local tar-gzip file. day of week # plus .tgz will be appended to argument 3
REMOTE=3D$1 SRC=3D$2 DEST=3D$3
if rsh $REMOTE tar -cf - $SRC |gzip > $DEST; then echo `date`": Done backing up "$REMOTE":"$SRC" to "$DEST else echo `date`": Error backing up "$REMOTE":"$SRC" to "$DEST fi
}
# $1: win=3Dbackup windows machine, unix=3Dbackup unix machine case $1 in win) # $2=3D remote windows name, $3=3Dremote share name, # $4=3Dlocal destination directory CopyWinHost $2 $3 $4;; unix) # $2 =3D remote host, $3 =3D remote directory, # $4 =3D destination name CopyUnixHost $2 $3 $4;; esac
  以上两个文件都是针对于具体的机器而设计的,如果您准备对自己的机器也进行备份,那么请您安照您自己的机器的具体情况来修改这两个文件的一个,就可以使用了。
2、跨子网使用samba
  许多大型企业有不同的子网,但是如何将另一个子网的内容被其它子网共享,是一个非常关键的问题,许多samba的用户在这里遇到许多麻烦,如果这点被解决了,那么可以使资源利用率大大提高。使企业的成本降低不少。
  Andrew Tridgell声称SMB主机在通过有路由的网络共享时有一些问题。这是他的一些建议:
  跨子网(例如,通过路由)资源浏览,你需要作以下事情。
  1.所有希望被浏览的的计算机应该使用一个单个的WINS服务器(Samba或NT可以作到这点)
  2.每个子网的master brower必须不是NT就是samba。(win9x不能正常地跨子网工作通讯)
  3.你必须将所有子网的workgroup名字都设成一样的。这并不需要非常严格地遵守,但是这是保证成功的最简单的方式之一。如果你不能遵守这一条,那么你必须组织一种可以连接两个网络的方式,它可以由两种方式实现:
  (1)每个browse master注意到在同一广播域中其它的borwse masters的workgroup的描述(2)每个非win9x的browse master要接触全部workgroup的DMB(常用的有:将主域控制器或一个samba服务器标记为domain master),并且周期性地交换browse 信息。
  当然,其它用户指出,cisco的路由器可以通过一种方式被设置成解析SMB的交流,并允许浏览。它的建议是将SMB主机的路由接口设置成:
ip helper-address x.x.x.x
  这里x.x.x.x是这台SMB服务器的IP地址。