disk partitions & filesystem

---磁盘分区与文件系统---

分区

磁盘分区方法:主流MBR & GPT
parted
fdisk:2T以内
gdisk:更大的分区

查看分区表的四种方法:
				lsblk:
				cat /proc/partitions:
				cat /dev/sd*
				fdisk -l /dev/sda       这个命令查看的是硬盘里的信息,上面三种都是查看内存,可能存在不同步的情况!

如何同步内存的分区表信息?
				centos6:
								新增加了分区同步:partx -a /dev/sda
								新删除了分区同步:partx -d --nr 6 /dev/sda      删除了第6个分区  
				centos7:直接使用该命令同步: partprobe

fdisk使用:
				-l /dev/sd* 查看disk相关信息:
								centos7:size,sector,I/O,parttions,disk label type(dos/gpt)...
								centos6:size,head,sectors,track,cylinder,disk label type...     注:centos6按照柱面划分,centos7按照扇区划分。
				n:创建新分区
				d:删除
				p:打印分区表
				q:不存盘退出
				w:存盘退出
				t:修改ID        centos7:
																主分区:83
																swap:82(ext)
																extend:5
																LVM:8e
																swap:19(GPT)



gdisk:与fdisk指令类似

创建文件系统

为什么创建文件系统?怎么查看?怎么使用文件系统?
				使用:调用虚拟文件系统提供的命令接口
				查看:lsblk -f 或者 blkid
				磁盘分区完成后没有任何信息,文件系统将磁盘以文件的方式组织和管理。
查看Linux内核支持的文件系统:
				ls /lib/modules/3.10.0-693.el7.x86_64/kernel/fs/
				目前常用的:ext4,fat,nfs,xfs,ceph,iso9660(光盘)...
				ceph:分布式文件系统
								数据有冗余,数据的一部分是在好几台服务器上有备份,可恢复。
centos6:ext4    >ext2 有日志功能,掉电数据不会丢失。
centos7:xfs

创建(格式化):mkfs.xfs /dev/sdb1 -f     文件系统创建完成,会生成一些元素据等。
				-L "卷标" 建议写挂载点的名字
				如:mkfs.xfs -L "/mnt/dsb1" /dev/sdb1
mke2fs也可以创建ext文件系统,不建议使用了。

tune2fs -l /dev/sdb2    查看分区的属性信息,只支持ext系统

centos6:人为创建的分区,没有acl功能。tune2fs -o acl /dev/sdb1添加acl属性 需重新挂载生效

filesystem state:clean 表明没有问题

如何破坏ext4文件系统并修复?
				1:为/dev/sdb2分区创建ext4文件系统,并挂载       mkfs.ext4 -L "/mnt/sdb2" /devsdb2
				2:dd 修改/dev/sdb2     dd if=/dev/zero of=/dev/sdb2 bs=10M count=1
				3:fsch修复,重新挂载    fsck.ext4 /dev/sdb2 -y  mount /dev/sdb2 /mnt/sdb2/ 但是目录中原来的文件可能丢失了

查看块组和节点表和超级快:dumpe2fs /dev/sda1|less

根据UUID查找分区:blkid -U `sed -nr '/^UUID/s/UUID=(.*) \/data.*$/\1/p' /etc/fstab`

blkid:查看分区,LABEL,UUID,mount,filesystem...
				[root@chenxu ~]# blkid /dev/sdb2
				/dev/sdb2: LABEL="/mnt/sdb2" UUID="5b14eaf9-2ebf-4373-9e99-6a702ab207eb" TYPE="ext4"

挂载:

				一个设备可以有多个挂载点,多个设备不能挂载到一个目录,通常挂载点应该为空目录

umount时,挂载目录被其他人占用(busy)怎么办?
				查看:lsof /mnt/sdb2/  fuser -v /mnt/sdb2
				踢出:fuser -km /mnt/sdb2

查看目录是否有挂载:findmnt /mnt/sdb2

挂载:建议使用UUID,因为唯一

mount常用命令选项:
				-r: r
				-w: r + w
				-n:不更新/etc/mtab,影藏挂载(centos6有效)
				-a:自动挂载/etc/fstab中定义的的挂载设备
				-U:UUID
				-L:LABEL
				-B:绑定目录到另外一个目录
				-o:可以添加一些子选项 acl, remount, ro, noatime, nodiratime,noexec...

一些后面虚拟化会用到的知识:
				centos7:
								1:创建稀疏文件 dd if=/dev/zero of=vdisk.img bs=1M count=1 seek=2048    创建一个2G的稀疏文件,
								2:文件模拟硬盘挂载
												1:mkfs.ext4 /data/vdisk.img     创建ext4文件系统
												2:mount /data/vdisk.img /mnt/vdisk 挂载
												3:df 查看       /dev/loop0       1998608    6144   1871224   1% /mnt/vdisk 默认第一个设备名为/dev/loop0,与centos不同,系统可以根据文件挂载自动生成相应的/dev/loop*,
																centos6需要挂载时指定。
				centos6:
								1:centos6默认有loop0~loop7 8个换回设备
								2:将loop设备与文件绑定  losetup /dev/loop0 /data/vdisk.img
								3:挂载  mount /dev/loop0 /mnt/vdisk
								4:查看:df       /dev/loop0       1108144    1424   1048764   1% /mnt/vdisk

								修改默认loop设备数量:vim /boot/grub/grub.conf  <-- max_loop=100 需要重启

永久挂载:
				写入:/etc/fstab
				UUID:mount point:filesystem:options:backup天数:check

/etc/fstab文件故障导致系统无法启动修复:
				centos6:默认/以只读方式挂载,需要mount -o rw,remount 
				centos7:是r + w

Swap作用:
[root@chenxu ~]# free -h
							total        used        free      shared  buff/cache   available
Mem:           1.9G        256M         89M        9.3M        1.6G        1.5G
Swap:          3.0G          0B        3.0G
[root@chenxu ~]# dd if=/dev/zero of=/dev/null bs=4G count=1
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB) copied, 7.95993 s, 270 MB/s

添加swap分区后,生效:swapon -a
关闭swap:swapoff
查看swap:cat /proc/swaps

如何把文件当作swap使用?
				1,mkswap /data/swapfile
				2,swapon -a
				3,chmod 600 /data/swapfile
				4,swapon -s 查看
测试硬盘速度?
		 1012  dd if=/dev/zero of=/data/f1 bs=1024 count=1000000 conv=fdatasync
		 1013  dd if=/dev/zero of=/data/f2 bs=2048 count=500000  conv=fdatasync
		 1014  dd if=/dev/zero of=/data/f3 bs=4096 count=250000  conv=fdatasync
		 1015  dd if=/dev/zero of=/data/f4 bs=1024 count=1000000  conv=fdatasync
			如何清除一个磁盘的分区信息?
							用dd直接清空/dev/sd*的前512字节即可。