根据Linux下皆文件的思想,Linux中将硬盘、分区等设备也是表示为文件,存放在目录/dev/下:
当我们往主板上插入一块新的硬盘时,/dev/目录下就会产生一个设备文件。怎么看哪个是设备文件呢?
我们知道,硬盘接口类型有IDE、SATA、SCSI,故IDE接口的硬盘的文件名格式为hd*;由于SATA/USB/SCSI等磁盘接口都是使用SCSI模块来驱动的,故SATA和SCSI接口的硬盘的文件名格式为sd*。
master boot record——主引导记录MBR包含了硬盘的主引导程序和硬盘分区表,在而分区表中有4个分区记录区,每个分区记录区占16个字节。
怎么划分分区呢?我们来认识一下磁盘管理工具fdisk。
我们用fdisk命令,加上参数<设备路径>,对该设备进行磁盘管理:
[root@nat18 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x571c56c2. Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)从输入m请求help的输出信息中我们可以看到,输入不同的字母可以执行不同的操作,下面我们介绍一下几个常用的:
字母作用n创建分区 newd删除分区 deletet转换分区system idw保存退出交互 writep打印该磁盘分区情况 printq退出不保存 quit好,我们来试着用这些交互来创建一个分区:
Command (m for help): n //创建分区 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): //默认创建主分区 Using default response p Partition number (1-4, default 1): //分区号 First sector (2048-41943039, default 2048): //指定起始扇区,默认2048 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G //指定结尾扇区,也可直接指定大小 Partition 1 of type Linux and of size 10 GiB is set Command (m for help): p //打印分区情况 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x571c56c2 Device Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux Command (m for help): w //保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.完成后确认,没有问题则输入w保存退出。退出交互后我们来确认一下是否成功,用fdisk -l dev_path
[root@nat18 ~]# fdisk -l /dev/sdb //查看/dev/sdb设备的分区情况 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x571c56c2 Device Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux以及能看到这个分区了,分区创建成功!但我们现在还不能使用这个分区,我们还要进行格式化和挂载,使用mkfs命令来对分区进行格式化。
一般用法:
mkfs -t 文件系统类型
或
mkfs.文件系统类型
我们看下实例:
[root@nat18 ~]# mkfs.ext4 /dev/sdb1 //格式化为ext4格式 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2151677952 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done没有报错,格式化成功。
注:格式化会导致磁盘数据丢失,慎用。
格式化完成后接下来是挂载。
命令格式:
mount dev_path mountpoint
我们创建一个挂载点,把格式化好的分区挂载起来:
[root@nat18 ~]# mkdir /sdb1 //创建挂载点 [root@nat18 ~]# mount /dev/sdb1 /sdb1/ //挂载分区用df命令来验证一下:
[root@nat18 ~]# df -Th //查看挂载情况 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 17G 9.7G 7.4G 57% / devtmpfs devtmpfs 475M 0 475M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 8.0M 479M 2% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 171M 844M 17% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 /dev/sdb1 ext4 9.8G 37M 9.2G 1% /sdb1既然有挂载,那自然就有取消挂载。
命令格式:
umount dev_path
或
umount mountpoint
例子:
[root@nat18 ~]# umount /sdb1/ [root@nat18 ~]# df -Th //查看设备是否还是挂载状态 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 17G 9.7G 7.4G 57% / devtmpfs devtmpfs 475M 0 475M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 8.0M 479M 2% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 171M 844M 17% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0至此为止,我们就把一块新的硬盘真正地使用起来了。但这样挂载存在一个问题:设备关机重启后,这些分区需要重新去挂载。作为管理员,这样的懒我们当然要想办法去偷~
当系统下划分了新的分区后,需要将这些分区设置为开机自动挂载,/etc/fstab文件负责配置Linux开机时自动挂载的分区。
我们用vim编辑器进入/etc/fstab文件中一看究竟:
# /etc/fstab # Created by anaconda on Sat Aug 31 07:09:33 2019 # # 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=01918100-0888-4544-b866-be556b8f36a1 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0我们来解读一下这个配置文件,看第一行,首先是一个设备路径,说明这是个分区;xfs是高性能日志文件系统,所以路径后面应该是文件系统类型;‘defaults’表示的是权限,默认的权限是读写,根据需要也可以改成ro(read only);最后两个0分别是容灾和加载顺序,一般填0就可以了。
回到原来的需求上,要实现自动挂载,就要把我们刚挂载的sdb1写入到/etc/fstab文件中:
# /etc/fstab # Created by anaconda on Sat Aug 31 07:09:33 2019 # # 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=01918100-0888-4544-b866-be556b8f36a1 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb1 /sdb1 ext4 defaults 0 0 //写入sdb1的挂载情况写好文件后,保存退出。在命令行中重新挂载我们的sdb1(因为刚刚用umount取消挂载了),这时因为我们已经把sdb1写入到/etc/fstab中了,所以只需要使用命令‘mount -a’ 就能把/etc/fstab中的设备全部挂载。
[root@nat18 ~]# df -Th //sdb1未挂载 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 17G 9.7G 7.4G 57% / devtmpfs devtmpfs 475M 0 475M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 15M 473M 3% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 171M 844M 17% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 [root@nat18 ~]# mount -a //挂载 [root@nat18 ~]# df -Th //sdb1成功挂载 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 17G 9.7G 7.4G 57% / devtmpfs devtmpfs 475M 0 475M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 15M 473M 3% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 171M 844M 17% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 /dev/sdb1 ext4 9.8G 37M 9.2G 1% /sdb1通过给fdisk命令给硬盘分区,确实可以给我们带来便利,但仍存在局限性:不能动态地改变分区的大小。而LVM,解决了这个问题。
PV——物理卷
VG——卷组
LV——逻辑卷
假如把所有的硬盘都当作资源来看,物理卷就是把硬盘经过加工,变成了适合去做LVM的一种形态;再把这些物理卷变成一个整体,也就是卷组,也可以把卷组理解成一个由很多硬盘组成的大硬盘;最后根据需要,对卷组进行划分,成为逻辑卷,逻辑卷就是可以灵活控制大小的磁盘啦。
我们把/dev/sdc和/dev/sdd两个硬盘做成物理卷,首先按照fdisk分区的方法为两个硬盘分区,两个硬盘都分1个主分区就好。
到这里,我们创建的逻辑卷mylv1就可以当做正常的硬盘一样使用啦:
[root@nat18 ~]# mkfs.ext4 /dev/myvg1/mylv1 //格式化 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2151677952 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@nat18 ~]# mount /dev/myvg1/mylv1 /mylv1/ //挂载,需先创建挂载点 [root@nat18 ~]# df -Th //查看挂载情况 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 17G 9.7G 7.4G 57% / devtmpfs devtmpfs 475M 0 475M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 15M 473M 3% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 171M 844M 17% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 /dev/sdb1 ext4 9.8G 37M 9.2G 1% /sdb1 /dev/mapper/myvg1-mylv1 ext4 9.8G 37M 9.2G 1% /mylv1 //挂载成功