Yan's BLOG


  • Published in vmware
  • February 28, 2013



我的VMWare中安装的是Fedora 9,不过其它Linux应该大同小异。

首先在VMWare中调整虚拟硬盘的大小(在“Virtual Machine Settings”的Hardware选项卡里选择“Hard Disk(SCSI)”,在右侧的Utilities里选择Expand进行扩展),也可以直接Add一块新的虚拟硬盘。

启动Linux,键入df -h查看磁盘信息:

[plain] view plaincopy
  1. [[email protected] ~]# df -h  
  2. Filesystem            Size  Used Avail Use% Mounted on  
  3. /dev/mapper/VolGroup00-LogVol00  
  4.                        29G   26G  2.3G  92% /  
  5. /dev/sda1             190M   13M  168M   7% /boot  
  6. tmpfs                 506M   48K  506M   1% /dev/shm  
  7. gvfs-fuse-daemon       29G   26G  2.3G  92% /root/.gvfs  

可以看到新增加的硬盘容量并没有体现在Linux中。使用fdisk -l查看分区表信息。我的信息是:

[plain] view plaincopy
  1. [[email protected] ~]# fdisk -l  
  3. Disk /dev/sda: 42.9 GB, 42949672960 bytes  
  4. 255 heads, 63 sectors/track, 5221 cylinders  
  5. Units = cylinders of 16065 * 512 = 8225280 bytes  
  6. Disk identifier: 0x000f1526  
  8.    Device Boot      Start         End      Blocks   Id  System  
  9. /dev/sda1   *           1          25      200781   83  Linux  
  10. /dev/sda2              26        3916    31254457+  8e  Linux LVM  

注意Disk /Dev/sda有40多G空间(刚刚通过VMWare扩展的),但两个Device /dev/sda1和/dev/sda2加起来只有30多G,有10G空间没有被使用。


[plain] view plaincopy
  1. [[email protected] ~]# fdisk /dev/sda  
  3. The number of cylinders for this disk is set to 5221.  
  4. There is nothing wrong with that, but this is larger than 1024,  
  5. and could in certain setups cause problems with:  
  6. 1) software that runs at boot time (e.g., old versions of LILO)  
  7. 2) booting and partitioning software from other OSs  
  8.    (e.g., DOS FDISK, OS/2 FDISK)  
  10. Command (m for help): n       //选择n表示新建分区  
  11. Command action  
  12.    e   extended  
  13.    p   primary partition (1-4)  
  14. e                             //选择e表示建立扩展分区  
  15. Partition number (1-4): 3     //选择3是因为1和2都被占了(/dev/dsa1和/dev/dsa2)  
  16. First cylinder (3917-5221, default 3917):                               //此分区起始柱面,直接按回车,使用默认值  
  17. Using default value 3917  
  18. Last cylinder or +size or +sizeM or +sizeK (3917-5221, default 5221):   //此分区大小,直接按回车,使用默认值(表明包含所有剩余空间)  
  19. Using default value 5221  
  21. Command (m for help): n       //在扩展分区基础上新建逻辑分区  
  22. Command action  
  23.    l   logical (5 or over)  
  24.    p   primary partition (1-4)  
  25. l                             //选择l表示新建逻辑分区  
  26. First cylinder (3917-5221, default 3917):                               //直接按回车  
  27. Using default value 3917  
  28. Last cylinder or +size or +sizeM or +sizeK (3917-5221, default 5221):   //直接按回车  
  29. Using default value 5221  
  31. Command (m for help): p       //选择p查看新的分区表,发现已经新建成功  
  33. Disk /dev/sda: 42.9 GB, 42949672960 bytes  
  34. 255 heads, 63 sectors/track, 5221 cylinders  
  35. Units = cylinders of 16065 * 512 = 8225280 bytes  
  36. Disk identifier: 0x000f1526  
  38.    Device Boot      Start         End      Blocks   Id  System  
  39. /dev/sda1   *           1          25      200781   83  Linux  
  40. /dev/sda2              26        3916    31254457+  8e  Linux LVM  
  41. /dev/sda3            3917        5221    10482412+   5  Extended  
  42. /dev/sda5            3917        5221    10482381   83  Linux  
  44. Command (m for help): w       //选择w保存  
  45. The partition table has been altered!  
  47. Calling ioctl() to re-read partition table.  
  49. WARNING: Re-reading the partition table failed with error 16: Device or resource busy.  
  50. The kernel still uses the old table.  
  51. The new table will be used at the next reboot.  
  52. Syncing disks.  



[plain] view plaincopy
  1. [[email protected] ~]# partprobe  


[plain] view plaincopy
  1. [[email protected] ~]# mkfs -t ext3 /dev/sda5  
  2. mke2fs 1.40.8 (13-Mar-2008)  
  3. Warning: 256-byte inodes not usable on older systems  
  4. Filesystem label=  
  5. OS type: Linux  
  6. Block size=4096 (log=2)  
  7. Fragment size=4096 (log=2)  
  8. 655360 inodes, 2620595 blocks  
  9. 131029 blocks (5.00%) reserved for the super user  
  10. First data block=0  
  11. Maximum filesystem blocks=2684354560  
  12. 80 block groups  
  13. 32768 blocks per group, 32768 fragments per group  
  14. 8192 inodes per group  
  15. Superblock backups stored on blocks:   
  16.     32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632  
  18. Writing inode tables: done                              
  19. Creating journal (32768 blocks): done  
  20. Writing superblocks and filesystem accounting information: done  
  22. This filesystem will be automatically checked every 32 mounts or  
  23. 180 days, whichever comes first.  Use tune2fs -c or -i to override.  

格式化完毕后,要将新的分区加入到LVM(Logical Volume Manager)以便以后管理。

[plain] view plaincopy
  1. [[email protected] ~]# pvdisplay  
  2.   --- Physical volume ---  
  3.   PV Name               /dev/sda2  
  4.   VG Name               VolGroup00  
  5.   PV Size               29.81 GB / not usable 25.93 MB  
  6.   Allocatable           yes   
  7.   PE Size (KByte)       32768  
  8.   Total PE              953  
  9.   Free PE               1  
  10.   Allocated PE          952  
  11.   PV UUID               gjFDfY-J0vK-7YKm-uo32-eiQZ-YO3D-PFbp1A  



[plain] view plaincopy
  1. [[email protected] ~]# pvcreate /dev/sda5  
  2.   Physical volume "/dev/sda5" successfully created  


[plain] view plaincopy
  1. [[email protected] ~]# pvdisplay  
  2.   --- Physical volume ---  
  3.   PV Name               /dev/sda2  
  4.   VG Name               VolGroup00  
  5.   PV Size               29.81 GB / not usable 25.93 MB  
  6.   Allocatable           yes   
  7.   PE Size (KByte)       32768  
  8.   Total PE              953  
  9.   Free PE               1  
  10.   Allocated PE          952  
  11.   PV UUID               gjFDfY-J0vK-7YKm-uo32-eiQZ-YO3D-PFbp1A  
  13.   "/dev/sda5" is a new physical volume of "10.00 GB"  
  14.   --- NEW Physical volume ---  
  15.   PV Name               /dev/sda5  
  16.   VG Name                 
  17.   PV Size               10.00 GB  
  18.   Allocatable           NO  
  19.   PE Size (KByte)       0  
  20.   Total PE              0  
  21.   Free PE               0  
  22.   Allocated PE          0  
  23.   PV UUID               WiG7f0-jGuq-HCUR-3MCZ-d8V0-rwV9-rEF2wg  


[plain] view plaincopy
  1. [[email protected] ~]# vgextend VolGroup00 /dev/sda5  
  2.   Volume group "VolGroup00" successfully extended  


[plain] view plaincopy
  1. [[email protected] ~]# lvdisplay  
  2.   --- Logical volume ---  
  3.   LV Name                /dev/VolGroup00/LogVol00  
  4.   VG Name                VolGroup00  
  5.   LV UUID                nvo0P1-8kmf-f9jJ-X4ii-RHUD-VvwK-AvIm36  
  6.   LV Write Access        read/write  
  7.   LV Status              available  
  8.   # open                 1  
  9.   LV Size                29.25 GB  
  10.   Current LE             936  
  11.   Segments               1  
  12.   Allocation             inherit  
  13.   Read ahead sectors     auto  
  14.   - currently set to     256  
  15.   Block device           253:0  
  17.   --- Logical volume ---  
  18.   LV Name                /dev/VolGroup00/LogVol01  
  19.   VG Name                VolGroup00  
  20.   LV UUID                2hi7f1-SPdo-FQdX-s4gE-Y74F-rgzQ-KAO55X  
  21.   LV Write Access        read/write  
  22.   LV Status              available  
  23.   # open                 1  
  24.   LV Size                512.00 MB  
  25.   Current LE             16  
  26.   Segments               1  
  27.   Allocation             inherit  
  28.   Read ahead sectors     auto  
  29.   - currently set to     256  
  30.   Block device           253:1  


[plain] view plaincopy
  1. [[email protected] ~]# lvextend /dev/VolGroup00/LogVol00 /dev/sda5  
  2.   Extending logical volume LogVol01 to 10.47 GB  
  3.   Logical volume LogVol01 successfully resized  


[plain] view plaincopy
  1. [[email protected] ~]# lvdisplay  
  2.   --- Logical volume ---  
  3.   LV Name                /dev/VolGroup00/LogVol00  
  4.   VG Name                VolGroup00  
  5.   LV UUID                nvo0P1-8kmf-f9jJ-X4ii-RHUD-VvwK-AvIm36  
  6.   LV Write Access        read/write  
  7.   LV Status              available  
  8.   # open                 1  
  9.   LV Size                39.22 GB  
  10.   Current LE             1255  
  11.   Segments               2  
  12.   Allocation             inherit  
  13.   Read ahead sectors     auto  
  14.   - currently set to     256  
  15.   Block device           253:0  
  17.   --- Logical volume ---  
  18.   LV Name                /dev/VolGroup00/LogVol01  
  19.   VG Name                VolGroup00  
  20.   LV UUID                2hi7f1-SPdo-FQdX-s4gE-Y74F-rgzQ-KAO55X  
  21.   LV Write Access        read/write  
  22.   LV Status              available  
  23.   # open                 1  
  24.   LV Size                32.00 MB  
  25.   Current LE             1  
  26.   Segments               1  
  27.   Allocation             inherit  
  28.   Read ahead sectors     auto  
  29.   - currently set to     256  
  30.   Block device           253:1  

LogVol00扩大了10G。但此时键入df -h,会发现我们的空间还是不能用

[plain] view plaincopy
  1. [[email protected] ~]# df -h  
  2. Filesystem            Size  Used Avail Use% Mounted on  
  3. /dev/mapper/VolGroup00-LogVol00  
  4.                        29G   26G  2.3G  92% /  
  5. /dev/sda1             190M   13M  168M   7% /boot  
  6. tmpfs                 506M   48K  506M   1% /dev/shm  
  7. gvfs-fuse-daemon       29G   26G  2.3G  92% /root/.gvfs  

需要用resize2fs工具调整Linux文件系统大小。如果你的Linux内核是2.6及以上版本,可以直接调整,否则需要先umount相关的设备后进行调整。Fedora 9的内核版本是2.6.25。OK,我们直接调整df命令中列出的/dev/mapper/VolGroup00-LogVol00文件系统

[plain] view plaincopy
  1. [[email protected] ~]# resize2fs /dev/mapper/VolGroup00-LogVol00  
  2. resize2fs 1.40.8 (13-Mar-2008)  
  3. Filesystem at /dev/mapper/VolGroup00-LogVol00 is mounted on /; on-line resizing required  
  4. old desc_blocks = 2, new_desc_blocks = 3  
  5. Performing an on-line resize of /dev/mapper/VolGroup00-LogVol00 to 10280960 (4k) blocks.  
  6. The filesystem on /dev/mapper/VolGroup00-LogVol00 is now 10280960 blocks long.  

此时再键入df -h命令查看

[plain] view plaincopy
  1. [[email protected] ~]# df -h  
  2. Filesystem            Size  Used Avail Use% Mounted on  
  3. /dev/mapper/VolGroup00-LogVol00  
  4.                        39G   26G   12G  69% /  
  5. /dev/sda1             190M   13M  168M   7% /boot  
  6. tmpfs                 506M   48K  506M   1% /dev/shm  
  7. gvfs-fuse-daemon       39G   26G   12G  69% /root/.gvfs  



esxi Displaying the ARP and Neighbor Discovery cache for VMkernel network interfaces


To review the ARP and ND cache for the VMkernel network interfaces on an ESX or ESXi host, use the local or remote esxcli command. This command is available at the local console of the ESX/ESXi host, and usable remotely from the vSphere Command Line Interface (vCLI) or from the vSphere Management Assistant (vMA) appliance. For installation and/or usage instruction, see the relevant documentation.

  1. Open a console session to the location where the esxcli command is available.
  2. Display the list of known network neighbors in the ARP and ND cache for all VMkernel network interfaces using one of the commands:
    • On ESXi 4.1:

      esxcli [--server hostname --username root --password rootpassword] network neighbor list
    • On ESXi 5.0:

      esxcli [--server hostname --username root --password rootpassword] network ip neighbor list
    Note: If running locally on the ESX/ESXi host console, no server hostname or authentication is required for the esxclicommand.

    The output appears similar to:

    Neighbor     Mac Address       vmknic Expiry(sec)
    --------     -----------       ------ -----------     00:50:56:9a:00:7a vmk0   1200     00:50:56:9a:00:57 vmk0   1197     00:50:56:9a:00:3e vmk0   277  00:50:56:9a:01:09 vmk1   979

ESXi S.M.A.R.T. health monitoring for hard drives

In ESXi 5.1, VMware added S.M.A.R.T. functionality to monitor hard drive health. The S.M.A.R.T. feature records various operation parameters from physical hard drives attached to a local controller. The feature is part of the firmware on the circuit board of a physical hard disk (HDD and SSD).

To read the current data from a disk:

  1. Determine the device parameter to use by running the command:

    esxcli storage core device list
  2. Read the data from the device:

    esxcli storage core device smart get -d device

    Where device is a value found in step 1.
  3. The expected output is a list with all SCSI devices seen by the ESXi host. For example:


    Note: External FC/iSCSI LUNs or virtual disks from a RAID controller might not report a S.M.A.R.T. status.

This table breaks down some example output:

Parameter Value Threshold Worst
Health Status OK N/A N/A
Media Wearout Indicator 0 0 0
Write Error Count N/A N/A N/A
Read Error Count 118 50 118
Power-on Hours 0 0 0
Power Cycle Count 100 0 100
Reallocated Sector Count 100 3 100
Raw Read Error Rate 118 50 118
Drive Temperature 27 0 34
Driver Rated Max Temperature N/A N/A N/A
Write Sectors TOT Count N/A N/A N/A
Read Sectors TOT Count N/A N/A N/A
Initial Bad Block Count N/A N/A N/A

Note: A physical hard drive can have up to 30 different attributes (the example above supports only 13). For more information, seeHow does S.M.A.R.T. function of hard disks Work?

Note: The preceding link was correct as of December 7, 2012. If you find the link is broken, provide feedback and a VMware employee will update the link.

A raw value can have two possible results:

  • A number between 0-253
  • A word (for example, N/A or OK)

Column descriptions

Note: The values returned and their meaning for each of these columns can vary by manufacturer. For more information, please consult your hardware supplier.

  • Parameter

    This is a translation from the attribute ID to human-readable text. For example:

    hex 0xE7 = decimal 231 = "Drive Temperature"

    For more information, see the Known ATA S.M.A.R.T. attributes section of the S.M.A.R.T. Wikipedia article.

    Note: The preceding link was correct as of December 7, 2012. If you find the link is broken, provide feedback and a VMware employee will update the link.
  • Value

    This is the raw value reported by the disk. To illustrate a simple Value using the example above, the Drive Temperature is reported as 27, which means 27 degrees Celsius.

    Value can either be a number (0-253) or a word (for example, N/A or OK).
  • Threshold

    The (failure) limit for the attribute.
  • Worst

    The highest Value ever recorded for the parameter.

smartd daemon

ESXi 5.1 also has the /sbin/smartd daemon in the DCUI installed. This tool does not have any command line switches or interaction with the console. If you run the command in the shell, a S.M.A.R.T. status is reported in the /var/log/syslog.log file.

For example:

XXXX-XX-28T10:15:12Z smartd: [warn] t10.ATA_____SanDisk_SDSSDX120GG25___________________120506403552________: below MEDIA WEAROUT threshold (0)
XXXX-XX-28T10:15:12Z smartd: [warn] t10.ATA_____SanDisk_SDSSDX120GG25___________________120506403552________: above TEMPERATURE threshold (27 > 0)
XXXX-XX-28T10:15:12Z smartd: [warn] t10.ATA_____WDC_WD2502ABYS2D18B7A0________________________WD2DWCAT1H751520: above TEMPERATURE threshold (113 > 0)


  • You can stop the daemon by typing Ctrl+c.
  • Logged events should be viewed with caution. As can be seen in the example, all three warnings are irrelevant. The output can vary greatly between manufacturers and disk models.


  • Published in CentOS 6
  • February 14, 2013










rsync [OPTION]... SRC [SRC]... DEST




rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST


rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]


















rsync *.c foo:src/




rsync -avz foo:src/bar /data/tmp




rsync -avz foo:src/bar/ /data/tmp






rsync somehost.mydomain.com::






-v, --verbose 详细模式输出

-q, --quiet 精简输出模式

-c, --checksum 打开校验开关,强制对文件传输进行校验

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-r, --recursive 对子目录以递归模式处理

-R, --relative 使用相对路径信息


rsync foo/bar/foo.c remote:/tmp/




rsync -R foo/bar/foo.c remote:/tmp/




-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。

--backup-dir 将备份文件(如~filename)存放在在目录下。

-suffix=SUFFIX 定义备份文件前缀

-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

-l, --links 保留软链结

-L, --copy-links 想对待常规文件一样处理软链结

--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结

--safe-links 忽略指向SRC路径目录树以外的链结

-H, --hard-links 保留硬链结

-p, --perms 保持文件权限

-o, --owner 保持文件属主信息

-g, --group 保持文件属组信息

-D, --devices 保持设备文件信息

-t, --times 保持文件时间信息

-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间

-n, --dry-run现实哪些文件将被传输

-W, --whole-file 拷贝文件,不进行增量检测

-x, --one-file-system 不要跨越文件系统边界

-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节

-e, --rsh=COMMAND 指定替代rsh的shell程序

--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息

-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件

--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件

--delete 删除那些DST中SRC没有的文件

--delete-excluded 同样删除接收端那些被该选项指定排除的文件

--delete-after 传输结束以后再删除

--ignore-errors 及时出现IO错误也进行删除

--max-delete=NUM 最多删除NUM个文件

--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输

--force 强制删除目录,即使不为空

--numeric-ids 不将数字的用户和组ID匹配为用户名和组名

--timeout=TIME IP超时时间,单位为秒

-I, --ignore-times 不跳过那些有同样的时间和长度的文件

--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间

--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0

-T --temp-dir=DIR 在DIR中创建临时文件

--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份

-P 等同于 --partial

--progress 显示备份过程

-z, --compress 对备份的文件在传输时进行压缩处理

--exclude=PATTERN 指定排除不需要传输的文件模式

--include=PATTERN 指定不排除而需要传输的文件模式

--exclude-from=FILE 排除FILE中指定模式的文件

--include-from=FILE 不排除FILE指定模式匹配的文件

--version 打印版本信息

--address 绑定到特定的地址

--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件

--port=PORT 指定其他的rsync服务端口

--blocking-io 对远程shell使用阻塞IO

-stats 给出某些文件的传输状态

--progress 在传输时现实传输过程

--log-format=formAT 指定日志文件格式

--password-file=FILE 从FILE中得到密码

--bwlimit=KBPS 限制I/O带宽,KBytes per second

-h, --help 显示帮助信息








uid = nobody

gid = nobody

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log



path = /www/

ignore errors

read only = true

list = false

hosts allow =

hosts deny =

auth users = backup

secrets file = /etc/backserver.pas



path = /home/web_user1/

ignore errors

read only = true

list = false

hosts allow =

hosts deny =

uid = web_user1

gid = web_user1

auth users = backup

secrets file = /etc/backserver.pas



path = /home/web_user2/

ignore errors

read only = true

list = false

hosts allow =

hosts deny =

uid = web_user2

gid = web_user2

auth users = backup

secrets file = /etc/backserver.pas








rsync --daemon




/usr/local/bin/rsync -vzrtopg --delete --exclude "logs/" --exclude "conf/ssl.*/" --progress This email address is being protected from spambots. You need JavaScript enabled to view it.::www /backup/www/ --password-file=/etc/rsync.pass


上面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。--exclude "logs/" 表示不对/www/logs目录下的文件进行备份。--exclude "conf/ssl.*/"表示不对/www/conf/ssl.*/目录下的文件进行备份。


This email address is being protected from spambots. You need JavaScript enabled to view it.::www 表示对该命令是对服务器202.99.11.120中的www模块进行备份,backup表示使用backup来对该模块进行备份。






[[email protected] /]# /usr/local/bin/rsync -vzrtopg --delete --exclude "logs/" --exclude "conf/ssl.*/" --progress This email address is being protected from spambots. You need JavaScript enabled to view it.::www /backup/www/ --password-file=/etc/rsync.pass

receiving file list ... done



785 (100%)


4086 (100%)


10680 (100%)


0 (100%)


3956 (100%)


wrote 2900 bytes read 145499 bytes 576.34 bytes/sec

total size is 2374927 speedup is 45.34


/usr/local/bin/rsync -vzrtopg --delete --progress This email address is being protected from spambots. You need JavaScript enabled to view it.::web_user1 /backup/web_user1/ --password-file=/etc/rsync.pass

/usr/local/bin/rsync -vzrtopg --delete --progress This email address is being protected from spambots. You need JavaScript enabled to view it.::web_user2 /backup/web_user2/ --password-file=/etc/rsync.pass

可以将客户命令通过crontab -e命令来实现自动备份,如crontab -e:



  • Published in CentOS 6
  • February 14, 2013




rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用。本文主要讲述的是如何自架rsync服务器,以实现文件传输、备份和镜像。相对tar和wget来说,rsync 也有其自身的优点,比如速度快、安全、高效。



  1. yum install rsync


  1. sudo apt-get  install  rsync


下面我们将涉及到三个文件 rsyncd.conf,rsyncd.secrets 和rsyncd.motd。
rsyncd.conf 是rsync服务器主要配置文件。
rsyncd.motd是定义rysnc 服务器信息的,也就是用户登录信息。

  1. mkdir /etc/rsyncd

注:在/etc目录下创建一个rsyncd的目录,我们用来存放rsyncd.conf 和rsyncd.secrets文件;

  1. touch /etc/rsyncd/rsyncd.conf

注:创建rsyncd.conf ,这是rsync服务器的配置文件;

  1. touch /etc/rsyncd/rsyncd.secrets

注:创建rsyncd.secrets ,这是用户密码文件;

  1. chmod 600 /etc/rsyncd/rsyncd.secrets


  1. touch /etc/rsyncd/rsyncd.motd

下一就是我们修改 rsyncd.conf 和rsyncd.secrets 和rsyncd.motd 文件的时候了。

  1. # Minimal configuration file for rsync daemon
  2. # See rsync(1) and rsyncd.conf(5) man pages for help
  4. # This line is required by the /etc/init.d/rsyncd script
  5. pid file = /var/run/rsyncd.pid   
  6. port = 873
  7. address = 
  8. #uid = nobody
  9. #gid = nobody   
  10. uid = root   
  11. gid = root   
  13. use chroot = yes 
  14. read only = no 
  17. #limit access to private LANs
  18. hosts allow= 
  19. hosts deny=*
  21. max connections = 5
  22. motd file = /etc/rsyncd/rsyncd.motd
  24. #This will give you a separate log file
  25. #log file = /var/log/rsync.log
  27. #This will log every file transferred - up to 85,000+ per user, per sync
  28. #transfer logging = yes
  30. log format = %t %a %m %f %b
  31. syslog facility = local3
  32. timeout = 300
  34. [linuxsirhome]   
  35. path = /home   
  36. list=yes
  37. ignore errors
  38. auth users = linuxsir
  39. secrets file = /etc/rsyncd/rsyncd.secrets 
  40. comment = linuxsir home 
  41. exclude =   beinan/  samba/     
  43. [beinan]
  44. path = /opt
  45. list=no
  46. ignore errors
  47. comment = optdir   
  48. auth users = beinan
  49. secrets file = /etc/rsyncd/rsyncd.secrets


  1. 用户名:密码
  2. linuxsir:222222
  3. beinan:333333

注: linuxsir是系统用户,这里的密码值得注意,为了安全,你不能把系统用户的密码写在这里。比如你的系统用户 linuxsir 密码是 abcdefg ,为了安全,你可以让rsync 中的linuxsir 为 222222 。这和samba的用户认证的密码原理是差不多的;
rsyncd.motd 文件;
它是定义rysnc 服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等;类似ftp服务器登录时,我们所看到的 linuxsir.org ftp ……。 当然这在全局定义变量时,并不是必须的,你可以用#号注掉,或删除;我在这里写了一个 rsyncd.motd的内容为:

  1. +++++++++++++++++++++++++++
  2. + linuxsir.org  rsync  2002-2007 +
  3. +++++++++++++++++++++++++++


  1. pid file = /var/run/rsyncd.pid

注:告诉进程写到 /var/run/rsyncd.pid 文件中;

  1. port = 873


  1. address =


  1. uid = nobody
  2. gid = nobdoy

注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。

  1. use chroot = yes

用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试;

  1. read only = yes

注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;

  1. #limit access to private LANs
  2. hosts allow=

注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;

  1. max connections = 5


  1. motd file = /etc/rsyncd/rsyncd.motd

注:motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。

  1. log file = /var/log/rsync.log

注:rsync 服务器的日志;

  1. transfer logging = yes


  1. [linuxsirhome]

注:模块,它为我们提供了一个链接的名字,链接到哪呢,在本模块中,链接到了/home目录;要用[name] 形式;

  1. path = /home


  1. auth users = linuxsir

注:认证用户是linuxsir ,是必须在 服务器上存在的用户;

  1. list=yes

注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;

  1. ignore errors


  1. secrets file = /etc/rsyncd/rsyncd.secrets


  1. comment = linuxsir home  data


  1. exclude =   beinan/   samba/

注:exclude 是排除的意思,也就是说,要把/home目录下的beinan和samba 排除在外; beinan/和samba/目录之间有空格分开 ;

启动rsync 服务器及防火墙的设置

启动rsync 服务器相当简单,–daemon 是让rsync 以服务器模式运行;

  1. /usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf

Linux 防火墙是用iptables,所以我们至少在服务器端要让你所定义的rsync 服务器端口通过,客户端上也应该让通过。

  1. iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT

查看一下防火墙是不是打开了 873端口;

  1. iptables -L


  1. rsync -avzP This email address is being protected from spambots. You need JavaScript enabled to view it.::linuxsirhome   linuxsirhome

Password: 这里要输入linuxsir的密码,是服务器端提供的,在前面的例子中,我们用的是 222222,输入的密码并不显示出来;输好后就回车;
注: 这个命令的意思就是说,用linuxsir 用户登录到服务器上,把linuxsirhome数据,同步到本地目录linuxsirhome上。当然本地的目录是可以你自己定义的,比如 linuxsir也是可以的;当你在客户端上,当前操作的目录下没有linuxsirhome这个目录时,系统会自动为你创建一个;当存在linuxsirhome这个目录中,你要注意它的写权限。
-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;

  1. rsync -avzP  --delete This email address is being protected from spambots. You need JavaScript enabled to view it.::linuxsirhome   linuxsirhome

这回我们引入一个 –delete 选项,表示客户端上的数据要与服务器端完全一致,如果 linuxsirhome目录中有服务器上不存在的文件,则删除。最终目的是让linuxsirhome目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;

  1. rsync -avzP  --delete  --password-file=rsync.password  This email address is being protected from spambots. You need JavaScript enabled to view it.::linuxsirhome   linuxsirhome

这次我们加了一个选项 –password-file=rsync.password ,这是当我们以linuxsir用户登录rsync服务器同步数据时,密码将读取 rsync.password 这个文件。这个文件内容只是linuxsir用户的密码。我们要如下做;

  1. touch rsync.password
  2. chmod 600 rsync.password
  3. echo "222222"> rsync.password
  4. rsync -avzP  --delete  --password-file=rsync.password  This email address is being protected from spambots. You need JavaScript enabled to view it.::linuxsirhome   linuxsirhome

注: 这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;

让rsync 客户端自动与服务器同步数据

crontab -e

  1. 10 0 * * * rsync -avzP  --delete  --password-file=rsync.password  This email address is being protected from spambots. You need JavaScript enabled to view it.::linuxsirhome   linuxsirhome



proftpd 500 OOPS: cannot change directory:/home/ftp

  • Published in CentOS 6
  • February 14, 2013



500 OOPS: cannot change directory:/home/ftp




# getsebool -a|grep ftp






# setsebool ftp_home_dir 1






# setsebool -P ftp_home_dir 1


ESXI & PfSense comme firewall

  • Published in Pfsense
  • February 12, 2013



Bonjour à tous,

Petit Long tuto fastidieux pour ceux qui souhaiterai comme moi, mettre en place PfSense sur leur serveur dédié Dedibox.
A priori rien de bien compliqué sauf qu'en fait si, d'où ce tuto !

Ce que vous devez avoir avant de commencer :
- Un serveur dédié chez Online.net
- Vous avez acheté une IP supplémentaire via le portail Online.net (IP Failover) et l'avez associée à votre serveur.
- Avoir obtenu une adresse MAC virtuelle pour VMware (toujours via le portail Online.net)
- Vous avez déployé ESXI sur votre serveur (toujours via le portail Online.net)

L'objectif est d'avoir une architecture de la sorte :

INTERNET ------ ESXI ----- PfSense (VM1) -|--- SERVEUR LAN 1 (VM2)
                                          |--- SERVEUR LAN 2 (VMx)

L'IP publique (la 1ère) sert uniquement à administrer l'ESXI.
L'IP publique (failover) sera utilisée pour la patte WAN de votre firewall (PfSense).

Configuration d'ESXI (désolé c'est en FR :/)
Dans "Configuration/Mise en réseau"
Cliquer sur "Ajouter gestion réseau...", sélectionnez "Machine virtuelle" puis "Créer un commutateur virtuel", appelez-le comme vous voulez ("VM Network LAN" dans mon exemple) et surtout, renseignez un VLAN ID autre que 0 (1 par exemple).

Sur ce commutateur virtuel seront reliés tous vos serveurs ainsi que la patte LAN du firewall.

Création des VM
C'est ici que ça se complique, vous le verrez ensuite, PfSense doit donc être installé mais surtout un package doit être rajouté une fois l'installation terminée. Pour obtenir ce package il faut bien évidemment une connexion internet chose qui ne fonctionne pas tant que ce package n'est pas installé (:D).

J'ai procédé de la sorte (un peu bourrin mais ça marche) :
Création d'une VM PfSense (disque en thin provisionning, important pour la suite) sur un autre ESXI (un ESXI sur lequel la passerelle est dans le même subnet que l'ip publique car c'est ça qui nous pose problème chez Online.net)

Je ne vous fait pas le détail de l'installation de PfSense ... pensez juste à mettre 2 cartes réseau (LAN + WAN).
Personnellement j'ai fait ça sur mon poste de travail avec VMware Workstation.
L'installation de PfSense terminée configurer les 2 interfaces LAN et WAN et accéder à l'interface web de configuration.

Sur cette interface allez dans "Système/Packages" et installez le package "Shellcmd".
Une fois installé vous pouvez éteindre votre VM et installer VMware Converter sur votre poste de travail.

Vous avez compris la suite, sauvegarder via VMware converter la VM que vous venez de créer sur VMware Workstation et déplacer là sur l'ESXI de Online.net (d'ou le Thin provisionning, vous avez ~300Mo à envoyer).

Une fois votre VM récupérée de l'autre coté, avant de la démarrer, retournez dans la conf des cartes réseaux de la VM :
Carte 1 : 
Adresse MAC Manuelle : saisissez l'adresse MAC fourni sur le portail Online.net (00:50:56: ...)
Etiquette réseau : "VM Network" (le vSwitch principal, PAS celui que vous avez créé tout à l'heure)

Carte 2 :
Adresse MAC Automatique
Etiquette réseau : "VM Network LAN" (ou autre selon le nom que vous avez donné à votre vSwitch secondaire)

Démarrez votre VM PfSense
Reconfigurer vos interfaces LAN et WAN depuis la ligne de commande via la console ESXI et accéder ensuite à l'interface web de management de PfSense depuis un de vos serveur LAN présent sur l'ESXI (oui je sais c'est un peu contraignant mais de toute façon si vous faite tout ça c'est bien pour mettre d'autres VM derrière non ? :D).

Une fois sur l'interface web de management :
- Vérifiez que le module "Shellcmd" est bien présent (il n'y a pas de raison m'enfin bon ...)
- Aller dans "Interfaces/WAN" et spécifiez votre adresse MAC virtuelle dans le champs "MAC address"
- Le champ IP address doit contenir votre ip publique failover (/32)
- Le champ Gateway est pour l'instant vide.

Deux choses à faire :
- Configurer "Shellcmd"
- Spécifier la gateway

Aller dans "Services/Shellcmd" et ajoutez les 2 commandes suivantes :
route add -inet -link -iface em0 
route add default 

"" doit être remplacé par VOTRE passerelle (à priori votre ip publique principale avec un 1 à la fin)

Allez dans "System/routing", dans l'onglet "Gateways", ajoutez votre passerelle. 
Problème ici, PfSense n'accepte pas que l'on renseigne une passerelle qui n'appartient pas au même sous réseau que l'ip publique. Soit, saisissez donc votre IP publique failover ! (ce n'est que temporaire pas de panique).
Cochez bien l'option "Default Gateway" à la création.

Allez dans "Diagnostics/Backup-Restore" et sauvegardez votre configuration. Editez là en remplaçant votre ip failover par votre passerelle (attention l'ip failover apparait 2 fois dans la conf, modifiez au bon endroit).
Sauvegardez votre conf et rechargez là via "Diagnostics/Backup-Restore". Votre firewall redémarre.

Après redémarrage, retournez dans "Interfaces/WAN" et sélectionnez votre passerelle dans la liste, cliquez sur "Save" puis "Apply" en haut de la page. Là PfSense ne répond plus sur l'interface web, aller sur la console ESXI et faite un redémarrage du serveur.

Et voilà (ouf), ça devrait être bon.
(Pensez à renseigner les DNS dans "System/General Setup" !)

Vos VM auront donc une adresse LAN uniquement (attention à bien rattacher la carte réseau de vos serveur sur le vSwitch créé manuellement), la passerelle à renseigner étant l'adresse LAN du serveur PfSense.

J'espère n'avoir rien oublié !

Un grand merci à Scruffy, qui m'a mis sur la bonne voie pour la mise en place de PfSense.

Il y a sûrement des méthodes plus simple, n'hésitez pas à les proposer ! (en tout cas la mienne fonctionne


PF - pfctl命令备忘

  • Published in Pfsense
  • February 12, 2013


# pfctl -d Disable the packet filter.
# pfctl -e Enable the packet filter.

# pfctl -f /etc/pf.conf 载入 pf.conf 文件
# pfctl -nf /etc/pf.conf 解析文件,但不载入
# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则
# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则

# pfctl -sn 显示当前的NAT规则
# pfctl -sr 显示当前的过滤规则
# pfctl -ss 显示当前的状态表
# pfctl -si 显示过滤状态和计数
# pfctl -sa 显示任何可显示的

Subscribe to this RSS feed