btrfs文件系统介绍

btrfs文件系统介绍

简介

       Btrfs(B-tree,ButterFS ,Better FS通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。继ext3/4文件系统之后linux又有了比较强大的文件系统(btrfs文件系统),btrfs文件系统不仅可以将ext3/4系列的升级为btrfs 文件系统也可以将其降级为ext3/4的文件系统,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验 和特性。而且btrfs文件系统还具有快照,内建磁盘阵列(RAID)支持,支持子卷等功能,允许在线调整文件系统大小,更为“嚣张”的是btrfs 文件系统还支持快照的快照。突破了之前的一些文件系统。

一 btrfs核心特性


   1.扩展性 (scalability) 相关的特性:btrfs最重要的设计目标是应对大型机器对文件系统的扩展性要求。Extent,B-Tree 和动态inode创建等特性保证了btrfs在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。
   2.数据一致性(data integrity)相关的特性写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;还支持数据及元数据校验码(checksum)。
   3.多设备管理相关的特性:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;支持快照以及快照的快照。
   4.子卷(subvolume):子卷实质上是把文件系统的一部分配置为一个完整的子文件系统,采用subvolume,一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的设备空间,在需要磁盘空间时便从底层设备中分配,可以充分利用disk的带宽,可以简化磁盘空间的管理等,Subvolume可以作为根目录挂载到任意挂载点。
   5.透明压缩:分区里的每个文件都被自动压缩,不仅减小了文件的大小,还提高了性能。
   6. btrfs支持在线碎片整理。

二、 btrfs 常见命令


   1.文件系统创建:
      命令:mkfs.btrfs
      选项:-L 'LABEL'    #设置卷标
            -d< type>: raid0, raid1, raid5, raid6, raid10, single    #设置存储数据raid级别
            -m< profile>: raid0, raid1, raid5, raid6, raid10, single, dup  #设置存储元数据raid级别
            -O list-all: 列出支持的所有feature
   2.挂载文件系统:
      命令:mount -t btrfs /dev/sdb MOUNT_POINT
   3.透明压缩机制:
      命令:mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
   4.ext文件系统和btrfs文件系统之间转换:
      命令:btrfs-convert /dev/sdd1       #一般文件系统转换成btrfs文件系统;
      命令:btrfs-convert -r /dev/sdd1    #btrfs文件系统转换回一般文件系统。

三、 btrfs 常见子命令


   1.文件系统命令管理
      命令:btrfs filesystem <subcommand> [argumnet]
         show:属性查看
         df:查看挂载点的可使用空间
         label:设置器卷标
         resize:动态调整btrfs大小
         sync:同步文件系统
         defragment:碎片整理
         usage:显示文件系统使用详细信息
   2. 管理子卷和快照命令
      命令:btrfs subvolume <subcommand> [argumnet]
         Create:创建子卷
         Delete:删除子卷
         List:列出子卷
         show:显示子卷的详细信息
         syn:同步内存上的数据到磁盘上
         snapshot:创建快照
            命令格式:btrfs subvolume snapshot [-r] <SUBVOLUME_NAME> <SUNVOLUME_SNAP_NAME>
      挂载子卷:
            命令格式:mount -o subvol=SUBVOLUME  DEVICE /MOUNT_POIN
      查看子卷信息:
            命令格式:btrfs subvolume show MOUNT_POINT
   3.设备管理命令
      命令:btrfs device <subcommand> DEVICE /MOUNT_POIN
         add:添加设备
         delete:删除设备
         scan:扫描btrfs文件系统
   4.平衡数据块管理 (原有的数据移动一部分到新增的物理卷上)
      命令:btrfs balance <subcommand> [options] /MOUNT_POIN
         btrfs balance start -mconvert=raid5 -dconvert=raid1 /mydata ##平衡数据块管理,并且转换(元)数据存储RAID级别
         start:启用balance
         pause: 停止balance
         cancel:取消balance
         status:查看balance状态
         resume:重新开始
   5.检查卸载btrfs文件系统
         btrfs check [options]

四、btrfs管理及应用

新增4块20G磁盘 dev/sdb、/dev/sdc、/dec/sdd /dev/sde

   1、Btrfs文件系统创建
        [root@centos7 ~]# mkfs.btrfs -L mybtrfs /dev/sd{b,c,d}  ##将sdb sdc sdd 格式化为btrfs系统,并且设置卷标为‘mybtrfs’
	btrfs-progs v3.19.1
	See http://btrfs.wiki.kernel.org for more information.

	Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
	Turning ON incompat feature 'skinny-metadata': reduced-size metadata extent refs
	adding device /dev/sdc id 2
	adding device /dev/sdd id 3
	fs created label mybtrfs on /dev/sdb
		nodesize 16384 leafsize 16384 sectorsize 4096 size 60.00GiB
	[root@centos7 ~]# btrfs filesystem show  ##查看系统上的btrfs文件系统
	Label: 'mybtrfs'  uuid: 290c59ec-8741-4b7c-a542-0bc960f89064
		Total devices 3 FS bytes used 112.00KiB
		devid    1 size 20.00GiB used 2.02GiB path /dev/sdb
		devid    2 size 20.00GiB used 1.01GiB path /dev/sdc
		devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
	[root@centos7 ~]# blkid /dev/sdb /dev/sdc /dev/sdd  ##查看设备属性
	/dev/sdb: LABEL="mybtrfs" UUID="290c59ec-8741-4b7c-a542-0bc960f89064" UUID_SUB="969b4438-e1e4-4b4a-b9f6-250ed3bfd1ff" TYPE="btrfs" 
	/dev/sdc: LABEL="mybtrfs" UUID="290c59ec-8741-4b7c-a542-0bc960f89064" UUID_SUB="ecbea82c-8c39-4f68-b602-865d9455fd9c" TYPE="btrfs" 
	/dev/sdd: LABEL="mybtrfs" UUID="290c59ec-8741-4b7c-a542-0bc960f89064" UUID_SUB="74e8dc21-c7c6-446a-a578-6a56331c6f0e" TYPE="btrfs"
	###UUID相同,不同的UUID_SUB (子卷)
   2、挂载文件系统 透明压缩
        [root@centos7 ~]# mkdir /{mydata,mycompress} ##创建挂载目录
	[root@centos7 ~]# mount -t btrfs /dev/sdb /mydata/  ##挂载文件系统
	[root@centos7 ~]# mount | grep /mydata ##挂载成功
	/dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache)
	[root@centos7 ~]# btrfs filesystem df /mydata/ ##查看文件系统挂载点空间使用信息
	Data, RAID0: total=3.00GiB, used=1.00MiB
	System, RAID1: total=8.00MiB, used=16.00KiB
	System, single: total=4.00MiB, used=0.00B
	Metadata, RAID1: total=1.00GiB, used=112.00KiB
	Metadata, single: total=8.00MiB, used=0.00B
	GlobalReserve, single: total=16.00MiB, used=0.00B
	[root@centos7 ~]# df -h /dev/sdb ##空间使用情况
	Filesystem      Size  Used Avail Use% Mounted on
	/dev/sdb         60G   18M   57G   1% /mydata
	[root@centos7 ~]# btrfs filesystem usage /mydata  ##详细情况
	Overall:
		Device size:		  60.00GiB
		Device allocated:		   5.03GiB
		Device unallocated:		  54.97GiB
		Device missing:		     0.00B
		Used:			   1.25MiB
		Free (estimated):		  57.97GiB	(min: 30.49GiB)
		Data ratio:			      1.00
		Metadata ratio:		      1.99
		Global reserve:		  16.00MiB	(used: 0.00B)

	Data,RAID0: Size:3.00GiB, Used:1.00MiB
	   /dev/sdb	   1.00GiB
	   /dev/sdc	   1.00GiB
	   /dev/sdd	   1.00GiB

	Metadata,single: Size:8.00MiB, Used:0.00B
	   /dev/sdb	   8.00MiB

	Metadata,RAID1: Size:1.00GiB, Used:112.00KiB
	   /dev/sdb	   1.00GiB
	   /dev/sdd	   1.00GiB

	System,single: Size:4.00MiB, Used:0.00B
	   /dev/sdb	   4.00MiB

	System,RAID1: Size:8.00MiB, Used:16.00KiB
	   /dev/sdc	   8.00MiB
	   /dev/sdd	   8.00MiB
	###透明压缩机制:
	[root@centos7 ~]# umount /dev/sdb
	[root@centos7 ~]# mount -o compress=zlib /dev/sdb /mycompress/
	[root@centos7 ~]# mount | grep /mycompress
	/dev/sdb on /mycompress type btrfs (rw,relatime,seclabel,compress=zlib,space_cache)
   3、调整btrfs文件系统大小:(扩大、缩小)
        #####联机缩小文件系统#####
	[root@centos7 ~]# btrfs filesystem resize -15G /mydata
	Resize '/mydata' of '-15G'
	[root@centos7 ~]# df -h | grep /dev/sdb
	Filesystem               Size  Used Avail Use% Mounted on
	/dev/sdb                  45G   18M   45G   1% /mydata
	##注意:缩小时,空间不能超出单块硬盘空闲空间
	#####联机扩大文件系统#####
	[root@centos7 ~]# btrfs filesystem resize +10G /mydata
	Resize '/mydata' of '+10G'
	[root@centos7 ~]# df -h | grep /dev/sdb
	Filesystem               Size  Used Avail Use% Mounted on
	/dev/sdb                  55G   18M   45G   1% /mydata
   4、增大物理边界 (增加一块硬盘/dev/sde 20G)
	[root@centos7 ~]# btrfs device add /dev/sde /mydata ##增大物理边界
	[root@centos7 ~]# df -h | grep /mydata
	Filesystem               Size  Used Avail Use% Mounted on
	/dev/sdb                  75G   18M   74G   1% /mydata
	[root@centos7 ~]# btrfs filesystem show ##查看信息
	Label: 'mybtrfs'  uuid: 290c59ec-8741-4b7c-a542-0bc960f89064
		Total devices 4 FS bytes used 960.00KiB
		devid    1 size 15.00GiB used 1.01GiB path /dev/sdb
		devid    2 size 20.00GiB used 1.26GiB path /dev/sdc
		devid    3 size 20.00GiB used 1.26GiB path /dev/sdd
		devid    4 size 20.00GiB used 0.00B path /dev/sde
   5、平衡btrfs文件系统
	[root@centos7 ~]# btrfs balance start -mconvert=raid5 -dconvert=raid1 /mydata ##平衡数据,并且元数据存储转换为raid5 数据文件存储转换为raid1
	Done, had to relocate 5 out of 5 chunks
	[root@centos7 ~]# btrfs filesystem show ##查看简要信息
	Label: 'mybtrfs'  uuid: 290c59ec-8741-4b7c-a542-0bc960f89064
		Total devices 4 FS bytes used 656.00KiB
		devid    1 size 15.00GiB used 384.00MiB path /dev/sdb
		devid    2 size 20.00GiB used 1.38GiB path /dev/sdc
		devid    3 size 20.00GiB used 384.00MiB path /dev/sdd
		devid    4 size 20.00GiB used 1.38GiB path /dev/sde

	[root@centos7 ~]# btrfs filesystem df  /mydata
	Data, RAID1: total=1.00GiB, used=528.00KiB
	System, RAID5: total=96.00MiB, used=16.00KiB
	Metadata, RAID5: total=1.03GiB, used=112.00KiB
	GlobalReserve, single: total=16.00MiB, used=0.00B

	[root@centos7 ~]# btrfs filesystem usage /mydata ##查看详细信息
	WARNING: RAID56 detected, not implemented
	WARNING: RAID56 detected, not implemented
	Overall:
		Device size:		  75.00GiB
		Device allocated:		   2.00GiB
		Device unallocated:		  73.00GiB
		Device missing:		     0.00B
		Used:			   1.03MiB
		Free (estimated):		  37.50GiB	(min: 37.50GiB)
		Data ratio:			      2.00
		Metadata ratio:		      0.00
		Global reserve:		  16.00MiB	(used: 0.00B)

	Data,RAID1: Size:1.00GiB, Used:528.00KiB
	   /dev/sdc	   1.00GiB
	   /dev/sde	   1.00GiB

	Metadata,RAID5: Size:1.03GiB, Used:112.00KiB
	   /dev/sdb	 352.00MiB
	   /dev/sdc	 352.00MiB
	   /dev/sdd	 352.00MiB
	   /dev/sde	 352.00MiB

	System,RAID5: Size:96.00MiB, Used:16.00KiB
	   /dev/sdb	  32.00MiB
	   /dev/sdc	  32.00MiB
	   /dev/sdd	  32.00MiB
	   /dev/sde	  32.00MiB

	Unallocated:
	   /dev/sdb	  14.62GiB
	   /dev/sdc	  18.62GiB
	   /dev/sdd	  19.62GiB
	   /dev/sde	  18.62GiB
   6、减小物理边界 (删除硬盘/dev/sdc 20G)
	[root@centos7 ~]# btrfs device delete /dev/sdc /mydata/ ###减小物理边界
	[root@centos7 ~]# df -h | grep /mydata ##查看信息
	/dev/sdb                  28G   17M   20G   1% /mydata
	[root@centos7 ~]# btrfs filesystem usage /mydata ##查看详细信息
	WARNING: RAID56 detected, not implemented
	WARNING: RAID56 detected, not implemented
	Overall:
		Device size:		  55.00GiB
		Device allocated:		   2.00GiB
		Device unallocated:		  53.00GiB
		Device missing:		     0.00B
		Used:			   1.03MiB
		Free (estimated):		  27.50GiB	(min: 27.50GiB)
		Data ratio:			      2.00
		Metadata ratio:		      0.00
		Global reserve:		  16.00MiB	(used: 0.00B)

	Data,RAID1: Size:1.00GiB, Used:528.00KiB
	   /dev/sdd	   1.00GiB
	   /dev/sde	   1.00GiB

	Metadata,RAID5: Size:1.00GiB, Used:112.00KiB
	   /dev/sdb	 512.00MiB
	   /dev/sdd	 512.00MiB
	   /dev/sde	 512.00MiB

	System,RAID5: Size:64.00MiB, Used:16.00KiB
	   /dev/sdb	  32.00MiB
	   /dev/sdd	  32.00MiB
	   /dev/sde	  32.00MiB

	Unallocated:
	   /dev/sdb	  14.47GiB
	   /dev/sdd	  18.47GiB
	   /dev/sde	  18.47GiB
	[root@centos7 ~]# cd /mydata/ ###查看数据完好
	[root@centos7 mydata]# ll
	total 24
	-rw-r--r--. 1 root root   465 Apr 26 23:18 fstab
	-rw-r--r--. 1 root root 13948 Apr 26 23:18 functions
	-rw-r--r--. 1 root root    23 Apr 26 23:18 issue
	[root@centos7 mydata]# cat fstab 
	#
	# /etc/fstab
	# Created by anaconda on Tue Apr 12 13:40:11 2016
	#
	# Accessible filesystems, by reference, are maintained under '/dev/disk'
	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
	#
	/dev/mapper/centos-root /                       xfs     defaults        0 0
	UUID=ccdd0c89-e55a-4842-8168-364e7a767225 /boot	xfs     defaults        0 0
	/dev/mapper/centos-swap swap                    swap    defaults        0 0
   7、btrfs子卷管理
	#####创建子卷 log 和 htdoc #####
	[root@centos7 mydata]# btrfs subvolume create /mydata/log
	Create subvolume '/mydata/log'
	[root@centos7 mydata]# btrfs subvolume create /mydata/htdoc
	Create subvolume '/mydata/htdoc'
	[root@centos7 mydata]# btrfs subvolume list /mydata ##查看子卷
	ID 264 gen 87 top level 5 path log  # #ID 262是子卷log的ID,可以用该ID来挂载该卷
	ID 265 gen 88 top level 5 path htdoc
	[root@centos7 ~]# ll /mydata/ ##查看在父卷下生成子卷log和htdoc
	total 24
	-rw-r--r--. 1 root root   465 Apr 26 23:18 fstab
	-rw-r--r--. 1 root root 13948 Apr 26 23:18 functions
	drwxr-xr-x. 1 root root     0 Apr 26 23:42 htdoc
	-rw-r--r--. 1 root root    23 Apr 26 23:18 issue
	drwxr-xr-x. 1 root root     0 Apr 26 23:42 log
	#####挂载子卷#####
	[root@centos7 ~]# mount /dev/sdb /mydata/
	[root@centos7 ~]# mount -o subvol=log /dev/sdc /log ##将子卷单独挂载到/log目录
	[root@centos7 ~]# ll /log/  ##目录为空
	total 0
	[root@centos7 ~]# btrfs subvolume show /log  ##查看子卷信息
	/log
		Name: 			log
		uuid: 			67ef54e5-d58a-dd47-bd4a-9c64be59cfca
		Parent uuid: 		-
		Creation time: 		2016-04-26 23:42:21
		Object ID: 		264
		Generation (Gen): 	90
		Gen at creation: 	87
		Parent: 		5
		Top Level: 		5
		Flags: 			-
		Snapshot(s):
	[root@centos7 ~]# cp /var/log/messages /log ##向子卷拷贝文件
	[root@centos7 ~]# ll /log
	total 164
	-rw-------. 1 root root 164212 Apr 27 00:07 messages
	[root@centos7 ~]# umount /log ##卸载子卷
	[root@centos7 ~]# ll /mydata/log/messages  ##查看父卷
	-rw-------. 1 root root 164212 Apr 27 00:07 /mydata/log/messages
	##子卷卸载,但是通过父卷可以查看文件,说明挂载了父卷也就同时挂载了子卷
	[root@centos7 ~]# umount /mydata ##卸载父卷
	[root@centos7 ~]# mount -o subvol=log  /dev/sdb /mydata ##单独挂载子卷
	[root@centos7 ~]# ll /mydata ##只能看到子卷文件,而看不到父卷文件
	total 164
	-rw-------. 1 root root 164212 Apr 27 00:07 messages
	##子卷,父卷可以单独挂载
	#####子卷快照#####
	[root@centos7 ~]# mount -o subvol=log /dev/sdb /log  ###单独挂载子卷
	[root@centos7 ~]# cp /etc/inittab /log/  ##拷贝文件到子卷
	[root@centos7 ~]# ll /log/
	total 168
	-rw-r--r--. 1 root root    511 Apr 27 00:26 inittab
	-rw-------. 1 root root 164212 Apr 27 00:07 messages
	[root@centos7 ~]# btrfs subvolume snapshot /mydata/log/ /mydata/log_snapshot ###创建子卷快照log_snapshot
	Create a snapshot of '/mydata/log/' in '/mydata/log_snapshot'
	[root@centos7 ~]# btrfs subvolume list /mydata ##查看创建的子卷成功
	ID 264 gen 98 top level 5 path log
	ID 265 gen 98 top level 5 path log_snapshot
	[root@centos7 ~]# ll /mydata/log_snapshot/ ##快照卷文件与子卷文件相同
	total 168
	-rw-r--r--. 1 root root    511 Apr 27 00:26 inittab
	-rw-------. 1 root root 164212 Apr 27 00:07 messages
	[root@centos7 ~]# cp /etc/passwd /log/ ###更新子卷文件 新增/删除文件
	[root@centos7 ~]# rm -rf /log/messages
	[root@centos7 ~]# ll /log/
	total 8
	-rw-r--r--. 1 root root  511 Apr 27 00:26 inittab
	-rw-r--r--. 1 root root 1341 Apr 27 00:29 passwd
	[root@centos7 ~]# ll /mydata/log_snapshot/  ###快照卷文件没有变化
	total 168
	-rw-r--r--. 1 root root    511 Apr 27 00:26 inittab
	-rw-------. 1 root root 164212 Apr 27 00:07 messages
	#####删除子卷#####
	[root@centos7 ~]# btrfs subvolume delete /mydata/htdoc ##删除子卷htdoc
	Delete subvolume (no-commit): '/mydata/htdoc'
	[root@centos7 ~]# btrfs subvolume delete /mydata/log_snapshot/
	Delete subvolume (no-commit): '/mydata/log_snapshot'
	[root@centos7 ~]# btrfs subvolume list /mydata ##查看信息
	ID 264 gen 91 top level 5 path log
   8、ext文件系统和btrfs文件系统之间转换
	###将/dev/sde 从btrfs文件系统中移除
	[root@centos7 ~]# btrfs device delete /dev/sde /mydata/ ##从btrfs中移除设备
	[root@centos7 ~]# fdisk /dev/sde ##分区
	[root@centos7 ~]# mkfs.ext4 /dev/sde1 ##将分区格式化为ext4文件系统
	[root@centos7 ~]# mount /dev/sde1 /mnt ##挂载ext4文件系统
	[root@centos7 ~]# cp /etc/fstab /mnt ##拷贝文件到ext4文件系统中
	[root@centos7 ~]# ll /mnt
	total 20
	-rw-r--r--. 1 root root   465 Apr 27 00:53 fstab
	drwx------. 2 root root 16384 Apr 27 00:52 lost+found
	###将ext文件系统转换为btrfs文件系统
	[root@centos7 ~]# umount /mnt ##卸载,不要在线转换
	[root@centos7 ~]# btrfs-convert /dev/sde1 ##转换文件系统
	creating btrfs metadata.
	copy inodes [o] [         0/        12]
	creating ext2fs image file.
	cleaning up system chunk.
	conversion complete.
	[root@centos7 ~]# blkid /dev/sde1 ##查看信息
	/dev/sde1: UUID="916f7a39-17ef-491e-b4bc-45e1b4c9eb3b" UUID_SUB="154b3bae-7fa5-4753-b357-44c63cecb24a" TYPE="btrfs"
	[root@centos7 ~]# mount /dev/sde1 /mnt ##重新挂载
	[root@centos7 ~]# ll /mnt ##查看信息
	total 20
	drwxr-xr-x. 1 root root  10 Apr 27 00:56 ext2_saved
	-rw-r--r--. 1 root root 465 Apr 27 00:53 fstab
	drwx------. 1 root root   0 Apr 27 00:52 lost+found
	[root@centos7 ~]# cat /mnt/fstab ##查看文件完好无损
	#
	# /etc/fstab
	# Created by anaconda on Tue Apr 12 13:40:11 2016
	#
	# Accessible filesystems, by reference, are maintained under '/dev/disk'
	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
	#
	/dev/mapper/centos-root /                       xfs     defaults        0 0
	UUID=ccdd0c89-e55a-4842-8168-364e7a767225 /boot xfs     defaults        0 0
	/dev/mapper/centos-swap swap                    swap    defaults        0 0
	###将btrfs文件系统转换为ext文件系统
	###从上面/mnt目录下多了个ext2_saved目录,正是有这个目录,btrfs文件系统才能重新转换到ext文件系统
	[root@centos7 ~]# umount /mnt 
	[root@centos7 ~]# btrfs-convert -r /dev/sde1
	rollback complete.
	  [root@centos7 ~]# blkid /dev/sde1
	/dev/sde1: UUID="832141e1-9d9d-4bc1-9189-b2685fef38f3" TYPE="ext4" 
	[root@centos7 ~]# mount /dev/sde1 /mnt
	[root@centos7 ~]# ll /mnt
	total 20
	-rw-r--r--. 1 root root   465 Apr 27 00:53 fstab
	drwx------. 2 root root 16384 Apr 27 00:52 lost+found
	[root@centos7 ~]# cat /mnt/fstab 
	#
	# /etc/fstab
	# Created by anaconda on Tue Apr 12 13:40:11 2016
	#
	# Accessible filesystems, by reference, are maintained under '/dev/disk'
	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
	#
	/dev/mapper/centos-root /                       xfs     defaults        0 0
	UUID=ccdd0c89-e55a-4842-8168-364e7a767225 /boot   xfs     defaults        0 0
	/dev/mapper/centos-swap swap                    swap    defaults        0 0

总结

本文总结了btrfs文件系统的简单介绍和基本使用,水平有限,如有错误请指出,谢谢~~

作者: chrony
感谢: MageEdu

原创文章,作者:chrony,如若转载,请注明出处:http://www.178linux.com/15556