zoukankan      html  css  js  c++  java
  • 磁盘及文件系统管理(以及btrfs)

    Linux系统管理
    	磁盘分区及文件系统管理
    	raid
    	lvm
    	网络属性管理
    	程序包管理
    	sed及awk
    	进程查看和管理
    	内核管理(内核的编译和安装)
    	系统启动流程
    	定制,编译内核,busybox
    	系统安装:kickstart,DHCP,pxe
    	shell脚本编程(敲黑板!!!)
    
    Linux磁盘及文件系统管理
    	CPU,memory(RAM),I/O
    
    	i/o: disks,ehtercard
    		disks:持久存储数据
    
    			接口类型:
    				IDE(ata): 并口,133MB/s;并行总线,双向四车道;并行数据容易产生干扰,导致数据损坏重传,因此效率低;并行越高,干扰频率越高
    				SCSI:并口,Ultrascsi320,320MB/s,UltraSCSI640,640MB/s;SCSI的费用更高;
    				SATA: 串口,6Gbps;串行总线,有前后,不能并行传输;
    				SAS:串口,6Gbps;
    				USB:串口,480MB/s;
    
    				并口:同一线缆可以接多块设备;
    					IDE:两个,主,从
    					SCSI:
    						宽带:16-1
    						窄带:8-1
    				串口:同一线缆只可以接一设备;
    
    				IOps : IO per second 
    					IDE:100次左右IO
    					SCSI:150左右
    					SATA:100多
    					SAS:100多到200
    					SSD固态硬盘:400左右
    					7200  rpm的磁盘 IOPS = 1000 / (9 + 4.17)  = 76 IOPS
    					10000 rpm的磁盘IOPS = 1000 / (6+ 3) = 111 IOPS
    					15000 rpm的磁盘IOPS = 1000 / (4 + 2) = 166 IOPS
    					PCI-E接口的固态硬盘IOPS都是
    						440k IOPS // 44万
    			硬盘:机械硬盘,固态硬盘SSD;
    				固态硬盘:类似于U盘,内部是多个并行
    			
    				机械硬盘:
    					track:磁道一个同心圆,角速度一致;每一个盘片的双面都可以读取;每一个盘片的每一面都有磁头;
    					sector:扇区就是每一个磁道中被分成若干等分的区域.相邻磁道是有间隔的,这是因为磁化单元太近会产生干扰;512bytes;
    					Cylinder:柱面;分区划分基于柱面;越靠近外部磁道的分区,性能越好;
    					rpm:rotation per minute 每分钟多数转
    						5400rpm,7200rpm,10000rpm,15000rpm
    
    					硬盘的容量=柱面数(CYLINDER)*磁头数(HEAD)*扇区数(SECTOR)*512B
    					存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
    
    	Linux的哲学思想:一切皆文件;
    
    		设备类型:
    			块(block):随机访问,数据交换单位是"块";
    				sda,sdb
    			字符(character):线性访问,数据交换单位是"字符";
    				tty1,tty2,pts
    		设备文件:FHS
    			/dev
    				设备文件:关联至设备的驱动程序;设备的访问入口;
    					设备号: 
    						major:主设备,区分设备类型;用于标明设备所需要的驱动程序;
    						minor:次设备号,区分同种类型下的不同设备;是特定设备的访问入口
    
    					mknod命令:创建块设备和字符设备
    						mknod [OPTION] ... NAME TYPE [MAJOR MINOR]
    							如: mknod /dev/testdev c 111 1
    							-m MODE : 直接指定其权限 //调用系统调用来实现权限修改
    						TYPE:
    							b 块设备
    							c,u 字符设备,(unbuffered)
    							p FIFO设备
    			设备文件名:是统一定义的,ICANN
    
    			磁盘:
    				IDE: /dev/hd[a-z]
    					例如:/dev/hda,/dev/hdb
    				SCSI,SATA,USB,SAS:/dev/sd[a-z]
    
    				引用设备的方式:
    					设备文件名
    					卷标
    					UUID  //128位
    				分区:
    					/dev/sda[1-4]
    				注意:Centos6和7统统将硬盘设备文件表示为/dev/sd[a-z]#
    	磁盘分区:MBR,GPT
    		MBR:0 sector  //0扇区
    			master boot record  //主引导记录
    
    			分为三部分:512字节
    				446bytes:bootloader,程序,引导启动操作系统的程序
    				64bytes:分区表,每16bytes标识一个分区,最多4个分区
    					4主分区
    					3主1扩展:
    						n逻辑分区
    				2bytes :MBR区域的有效性,55AA为有效
    			主分区和扩展分区的标识:1-4
    			逻辑分区:5+
    		GPT:
    
    	fdisk命令:分区
    		fdisk -l [-u] [device...]
    		1.查看磁盘分区信息
    			-l 列出信息
    				centos6:start。。end:柱面
    				centos7:start。。end:扇区
    		2.管理分区
    			fdisk /dev/sdb 
    			fdisk提供了交互式接口来管理分区,它有很多子命令,分别用于不同的管理功能,所有操作均在内存中完成,没有直接同步磁盘,直到w保存;
    				n:创建新分区
    				d:删除新分区
    				t:修改分区类型
    				l:查看所有已经id
    				w:保存并退出
    				q:不保存并退出
    				m:查看帮助
    				p:显示现有分区信息
    			注意: 在已经分区并已经挂载其中某个分区的磁盘设备上建立的新分区,内核可能在创建完成后无法直接识别;
    
    				查看:cat  /proc/partitions
    				通知内核强制重读磁盘分区表:
    					centos5: partprobe [device]
    					centos6,7: partx,kpartx
    						partx -a [device]  //多次执行确认是否重读
    						kpartx -af [device]
    				分区创建工具:parted,sfdisk
    	创建文件系统:
    		格式化:低级格式化(分区之前,划分磁道),高级格式化(分区之后对分区进行,创建文件系统)
            元数据区,数据区
            	元数据区:inode(index node)
                	文件元数据:大小,权限,属主属组 ,时间戳,数据块指针,
    
                链接文件:存储数据指针的空间当中存储的真实文件的访问路径:
                设备文件:存储数据指针的空间当中存心的设备号(major,minor): 
    
            bitmap index:位图索引
            	参考:http://www.cnblogs.com/LBSer/p/3322630.html
    
         	VFS: Virtual File System
    	        Linux 的文件系统:ext2 ,ext3,ext4,xfs,reiserfs
                光盘:Iso9660
                网络文件系统:nfs, clfs
                集群文件系统:gfs2,ocfs2
                内核级分布式文件系统:ceph
                windows的文件系统:proc,sysfs, tmpfs,hugepagefs
                Unix的文件系统:UFS, FFS, JFS
                交换文件系统:swap
                用户空间的分布式文件系统:mogilefs, moosefs,glusterfs
    
    	文件系统管理工具:
            创建文件系统管理工具
    			mkfs
    				mkfs.ext2(无日志功能),mkfs.ext3, mkfs.ext4, mkfs.xfs,mkfs.vfat,…
            检测及修复文件系统的工具
              	fsck
                	fsck.ext2,fsck,ext3,….
            查看其属性的工具
                dumpe2fs, tune2fs
            调整文件系统特性:
                tune2fs
    链接文件:访问同一个文件不同路径;
        硬连接:指向同一个inode的多个文件路径;
            特性:
             	(1)目录不支持硬连接;
          		(2)硬连接不能跨文件系统;
                (3)创建硬连接会增加inode路径;
            创建:ln命令
            	ln source_file link_file
    	符号连接(软连接):指向一个文件路径的另一个文件路径;
    		(1)符号链接与原文件是两个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数;		(2)支持对目录创建符号链接,可跨文件系统;
    		(3)删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;
        注意:符号链接文件的大小是其指定的文件的路径字符串的字节数;
            创建:ln -s 命令
    			ln -s source_file link_file
     				-v:verbose显示过程
    磁盘和文件系统管理:
    	文件系统管理工具:
    		创建文件系统管理工具
    			mkfs
    				mkfs.ext2(无日志功能),mkfs.ext3, mkfs.ext4, mkfs.xfs,mkfs.vfat,…
            检测及修复文件系统的工具
              fsck
                fsck.ext2,fsck,ext3,….
            查看其属性的工具
                dumpe2fs, tune2fs
            调整文件系统特性:
                tune2fs
    	内核级文件系统的组成部分:
           	文件系统驱动:由内核提供
           	文件系统管理工具:由用户空间的应用程序提供
       	ext系列文件系统的管理工具:
    	    mkfs.ext2(格式化操作),mkfs.ext3, mkfs.ext4
    	    mkfs -t ext2=mkfs.ext2
    
    	    ext系列文件系统专用管理工具:mke2fs
               	mke2fs [OPTIONS] device
                    -t {ext2|ext3|ext4}: fs-type指明要创建的文件系统类型
                    	mkfs.ext4=mkfs-t ext4=make2fs -t ext4
                    -b {1024 | 2048 | 4096}: 指明文件系统的块block大小;
                    -L LABEL: 指明卷标;不可超过16个字符;
                    -j:创建有日志功能的文件系统ext4;
                        make2fs -j = mke2fs -t ext3 =mkfs -t ext3 =mkfs.ext3
                    -i# :bytes-per-inde.指明inode与字节的比率;即每多少个自己创建一个Inode;
                    -m#:reserved-blocks-percentage 指定预留的空间,百分比;
                    -N#: last-mounted-directory直接指明要给次文件系统创建的inode的数量;
                    -O[^]FEATURE:feature[,...]以指定的特性创建目标文件系统;
                e2label命令: Change the label on an ext2/ext3/ext4 filesystem卷标的查看与设定
                    查看:e2label device
                    设定:e2label device LABEL
                tune2fs命令:adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems查看或修改ext系列文件系统的某些属性
                    adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;
                    注意:块大小创建后不可修改;
                tune2fs [OPTIONS] device 
                    -l: 查看超级块的内容;
                    	[root@centos6_7 ~]# tune2fs -l /dev/sda1
                    	tune2fs 1.41.12 (17-May-2010)
    					Filesystem volume name:   <none> //卷标名
    					Last mounted on:          /boot  //最近挂载
    					Filesystem UUID:          8880df83-5bf8-40db-bf6f-bf878b7a7e2e
    					Filesystem magic number:  0xEF53
    					Filesystem revision #:    1 (dynamic)  
    					Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize		//文件系统特性
    					Filesystem flags:         signed_directory_hash //标志
    					Default mount options:    user_xattr acl	//默认挂载选项
    					Filesystem state:         clean		//状态干净或不干净
    					Errors behavior:          Continue	
    					Filesystem OS type:       Linux
    					Inode count:              51200
    					Block count:              204800
    					Reserved block count:     10240
    					Free blocks:              158257
    					Free inodes:              51162
    					First block:              1
    					Block size:               1024
    					Fragment size:            1024	//片段
    					Reserved GDT blocks:      256
    					Blocks per group:         8192
    					Fragments per group:      8192
    					Inodes per group:         2048
    					Inode blocks per group:   256
    					Flex block group size:    16
    					Filesystem created:       Sun Aug 12 17:21:56 2018
    					Last mount time:          Sat Sep 15 00:11:46 2018
    					Last write time:          Sat Sep 15 00:11:46 2018
    					Mount count:              6
    					Maximum mount count:      -1
    					Last checked:             Sun Aug 12 17:21:56 2018
    					Check interval:           0 (<none>)
    					Lifetime writes:          44 MB
    					Reserved blocks uid:      0 (user root)
    					Reserved blocks gid:      0 (group root)
    					First inode:              11
    					Inode size:	          128
    					Journal inode:            8
    					Default directory hash:   half_md4
    					Directory Hash Seed:      80cf6de5-0a97-4d46-b1a9-98a33980d829
    					Journal backup:           inode blocks
                    修改指定文件系统的属性:
    	                -j: ext2 –>ext3;
    	                -L LABEL: 修改卷标;
    	                -m#: 调整预留空间(给管理员)百分比;
    	                -O[^]FEATHER: 开启或关闭某种特性;has_journal是ext3特性;
    	                -o[^]mount-options: 开启或关闭某种默认挂载选项
    	                    acl
    	                    ^acl
                dumpe2fs命令:显示ext系列文件系统的属性信息
                    dumpe2fs [-h] device
            用于手动实现文件系统检测的工具:fsck
    			因进程意外中止或系统崩溃等原因导致定稿操作非正常终止时,可能造成文件损坏;此时,应该检测并修复文件系统;建议,离线进行;
    	        ext系列文件系统专用工具:fsck,e2fsck
    	        	e2fsck: check a Linux ext2/ext3/ext4 file system
    				e2fsck: [OPTIONS] device
    					-y: 对所有问题自动回答为yes;
    					-f: 即使文件系统处于clean状态,也要强制检测;
    				fsck: check and repair a Linux file system
    					-t: fstype:指明文件系统类型;
    						fsck -t ext4=fsck.ext4
    					-a:无须交互而自动修复所有错误;
    					-r:交互式修复;
    
    Centos 6 如何使用xfs文件系统:
      	#yum -y install xfsprogs (能访问互联网就输入直接安装)
        或者
        	#cd/etc/yum.repos.d
        	#wget http://ip/源.repo
        	#mv CentOS-base.repo CenOS-Base.repo.bak
    
          	创建:mkfs.xfs
           	检测:fsck.xfs
        		mkfs -t ext2=mkfs.ext2
    	blkid的命令:
            blkid device
            blkid -L LABEL: 根据LABEL定位设备
            blkid -U UUID: 根据UUID定位设备
    swap文件系统:
    	Linux上的交换分区必须使用独立的文件系统;且文件系统的Szystem ID 必须为82;
    	创建swap设备:mkswap [OPTIONS] device
    		-L LABER: 指明卷标
    		-f: 强制
    
    xfs文件系统在centos7中查看文件系统属性命令:xfs_info
    
    Windows无法识别Linux的系统;因此,存储设备需要两种系统之间交叉使用时应该使用windows和Linux同时支持的文件系统:fat32(vfat);
    	# mkfs.vfat device
    
    文件系统的使用:
    	首先要"挂载": mount命令和umount命令
            根文件系统这外的其他文件系统要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载";此目录即为挂载点;
            挂载点:mount_point ,用于作为令一个文件系统的访问入口;
              	1.事先存在;
              	2.应该使用未被或不会被其他进程使用到的目录;
              	3.挂载点下原有的文件将会被隐藏;
    mount命令:
        mount [-fnrsvw] [-t vfstype] [-o options] device dir
            命令选项:
            -r:readonly只读挂载;
            -w:read and write读写挂载;
            -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
            -t:指明要挂在的设备文件系统类型;可省略,此时mount会通过blkid来判断要挂载的设备文件;
            -L LABEL:挂载时一卷标的方式指明设备;
            -U UUID:挂载时以UUID的方式指明设备;
                mount -U UUID diratime
            挂载选项:
            -o options
    	        syunc/asyunc:同步/异步操作;数据一写就保存内存中的数据到硬盘中为同步;
    	        atime/noatime:文件或目录在被访问时上是否更新其访问时间戳;
    	        diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
    	        remount:重新挂载;
    			acl:支持使用facl功能;
    			    # mount -o acl device dir
    			    # tune2fs -o acl device
    			ro:只读
    			rw:读写
    			dev/nodev:此设备上是否允许创建设备文件;
    			exec/noexec :是否允许自动运行设备上的程序文件;
    			user/nouser:是否允许普通用户挂载此文件系统;
    			auto/noauto:设备是否支持-a选项来实现自动挂载;
    			suid/nosuid:是否允许suid和sgid特殊权限的程序生效;
    
    			defaults默认:
    				Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
    
    一个使用技巧:
    	可以实现将目录绑定至另一个目录上,作为其临时访问入口;
    		mount --bind 源目录 目标目录
    
    查看当前系统所有已挂载的设备;
        mount
        cat /etc/mtab
        cat /proc/mounts
    挂载光盘:
        mount -r /dev/cdrom mount_point
    	光盘设备文件: /dev/cdrom, /dev/dvd
    挂载U盘:
       	事先识别U盘的设备文件;
    挂载本地的回环设备:
        mount -o loop /PATH/TO/SOME_LOOP_FILE mount_point
        umount1
        umount device |dir
    
    umount命令:
    	umount device|dir
    	
    	注意:正在被进程访问到的挂载点无法被卸载;
    		umount: /: device is busy.
            (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
         
    查看被哪个或那些进程所占用;
        lsof MOUNT_POINT
        fuser -v MOUNT_POINT
    终止所有正在访问某挂载点的进程;
    	fuser -km mount_point
    交换分区的启用和禁用:创建用mkswap [-c] [-f] [-p PSZ] [-L label] [-U uuid] device [size]
    
       	启用:swapon
            swapon [option][DEVICE] 
    	        -a:定义在/etc/fstab文件这的所有swap设备;
       	禁用:swapoff
            swapoff DEVICE
    
    
    设定除根文件系统以外的其他文件系统能够开机时自动挂载:/ect/fstab文件
    	每行定义一个要挂载的文件系统及相关属性(vim /etc/fstab );
    	[root@centos6_7 ~]# cat /etc/fstab
    
    	#
    	# /etc/fstab
    	# Created by anaconda on Sun Aug 12 17:26:53 2018
    	#
    	# 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
    	#
    	UUID=c9b74b1a-41cd-4260-9444-6245ab833dd9 /                       ext4    defaults        1 1
    	UUID=8880df83-5bf8-40db-bf6f-bf878b7a7e2e /boot                   ext4    defaults        1 2
    	UUID=3144b92b-c079-4239-9a91-84111d2f1ac1 swap                    swap    defaults        0 0
    	tmpfs                   /dev/shm                tmpfs   defaults        0 0
    	devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    	sysfs                   /sys                    sysfs   defaults        0 0
    	proc                    /proc                   proc    defaults        0 0
    
       	6个字段:
    		(1)要挂载的设备:
                设备文件:
                LABEL
                UUID      
                伪文件系统:如 sysfs, proc ,tmpfs等
    		(2)挂载点
            	swap类型的设备的挂载点为swap;
    		(3)文件系统类型
    		(4)挂载选项
            	defaults :使用默认挂载选项;
            	如果要同时指明读个挂载点选项,彼此间以事情分隔;
            	defsults, acl , noatime ,noexec
    		(5)转储频率:
    	        0:从不备份
    	        1:每天备份
    	        2:每隔一天备份
    		(6)自检次序
    	        0:从不自检
    	        1:首先自检,通常只能是根文件系统可用;
    	        2:次级自检
    	        ...
    	    mount -a 可自动挂载定义在此文件中的所支持自动挂载的设备(vim /etc/fstab );
    
    df和du命令:
        df [option]....file..	显示文件系统利用率report file system disk space usage
            -l:仅显示本地文件的相关信息blocks;
            -h:显示容易识别信息状态;
            -i:显示inode的使用状态而非blocks;
        du [option]....file..	显示文件真实大小estimate file space usage
            -s :sumay整体显示
            -h :human -readable
    
    练习:
    	1.创建一个10G的分区,并格式化为ext4文件系统;
    		#fdisk /dev/sda? 
    		...
    		# partx -a /dev/sdb
    		#mkfs.ext4 /dev/sda?
    		(1)block大小为2048;预留空间2%,卷标为mydata;
    		(2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
    		(3)可开机自动挂载;
    		#mke2fs -L 'mydata' -m 2 -b 2048 /dev/sda?
    		#mkdir /mydata
    		#mount -o noatime,noexec /dev/sda? /mytdata
    		#vim /etc/fstab  //  >> /dev/sda? /mydata defaults 0 0
    		#mount -a
    	2.创建一个大小为1G的swap分区,并启用;
    		# fdisk /dev/sda?
    		...
    		# partx -a /dev/sda?
    		# mkswap /dev/sda? 1G
    		# swapon -a /dev/sda?
    
    总结:文件系统管理
    	管理工具:mkfs,mke2fs,e2label,tune2fs,dumpe2fs,e2fsck,blkid
    		mkfs.xfs,mkfs.vfat,fsck
    		mkswap,swapon,swapoff
    		mount,umonut
    		df,du
    	fstab文件:
    		设备 挂载点 文件系统类型 挂载选项 转储频率 自动次序
    	文件系统:
    		目录:文件
    			元数据:inode
    			数据:data blocks
    		文件名:上级目录;
    		删除文件:将此文件指向的所有data block标记为未使用状态;将此文件的inode标记为未使用;
    		复制和移动文件:
    			复制:新建文件;
    			移动:
    				在一个文件系统:仅改变其路径;
    				在不同文件系统:复制数据至目标文件,并删除原文件;
    		符号/软链接:
    			权限:lrwxrwxrwx
    		硬链接:指向同一个inode;
    
    
    					
    
    btrfs文件系统:
    	参考:https://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/index.html
    	技术预览版
    
    	Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle, 2007, CoW; 
    	ext3/ext4, xfs
    
    	核心特性:
    		多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;
    		写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;
    		数据及元数据校验码:checksum
    		子卷:sub_volume
    		快照:支持快照的快照;
    		透明压缩:
    
    	文件系统创建:
    		mkfs.btrfs
    			-L 'LABEL'
    			-d <type>: raid0, raid1, raid5, raid6, raid10, single
    			-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup
    			-O <feature>
    				-O list-all: 列出支持的所有feature;
    
    		属性查看:
    			btrfs filesystem show 
    
    		挂载文件系统:
    			mount -t btrfs /dev/sdb MOUNT_POINT
    
    		透明压缩机制:目前 btrfs 采用 zlib 提供的 DEFALTE/INFLATE 算法进行压缩和解压;
    			mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
    
    	子命令:
    		1.修改文件系统大小,默认800;Mfilesystem(resize);
    			btrfsctl -r 300M /mount_point
    		2.添加新设备;device(add,delete)
    			#btrfs-vol – a /dev/sda8 /btrfsdisk
    		3.balance(start)
    
    		4.子卷;subvolume(list,create,delete)
    			#mkdir /mnt/test 
    			#btrfsctl – s sub1 /btrfsdisk 
    			#mount – t btrfs – o subvol=sub1 /dev/sda5 /mnt/test		
    		5.创建快照snapshot
    			 #ls /btrfsdisk 
    			 test1 test2 
    			 #vi test1 
    			 This is a test 
    			 #btrfsctl – s snap1 /btrfsdisk 
    			 #vi test1 
    			 Test1 is modified 
    			 #cd /btrfsdisk/snap1 
    			 #cat test1 
    			 This is a test	
    
    	博客作业:btrfs管理及应用
    
    	常用文件系统性能对比:http://www.cnblogs.com/tommyli/p/3201047.html
    

      

      

  • 相关阅读:
    c# 数组自定义排序
    我的第一个npm包:wechat-menu-editor 基于Vue的微信自定义菜单编辑器
    vue-element-admin左侧目录的三级展示
    vue的input框输入不了
    常用IDE(开发工具)
    DOM – 大杂烩
    Glob 语法
    Tailwind CSS – 学习笔记
    Google Ads – 大杂烩
    Webpack 学习笔记
  • 原文地址:https://www.cnblogs.com/liuyuanq/p/9915615.html
Copyright © 2011-2022 走看看