总结:磁盘分区
linux磁盘相关知识梳理
目录
1、/dev/hda, /dev/hdb, /dev/sda, /dev/sdb, 他们之间有什么区别?
一、介绍
一直对磁盘分区的概念没有太深入的理解,觉得有必要单独梳理下。
二、一些概念
对于物理机和虚拟机有各自磁盘的概念,比如物理机上是真实的磁盘信息,什么叫真实?就是没有进行虚拟化的。
虚拟机上也是要虚拟化磁盘的,对于用户来说就像一台物理机一样。但是既然是虚拟机,那么磁盘可能是虚拟化后的,一般会有固定的名字,比如经过kvm虚拟化技术虚拟出来的磁盘,名称是vda,vdb等,表示虚拟磁盘。但是也有例外的,见过百度云那边经过kvm虚拟化出来的虚拟机,但是分区名称却叫sdb,而sdb一般是物理机上真实的磁盘分区名称。
一般概念上:vda,vdb叫虚拟磁盘,或者直接说磁盘也行,在linux上的设备文件为/dev/vda,/dev/vdb。
三、磁盘分区
1、磁盘与分区
以上说的/dev/vdb是磁盘,磁盘需要再进行分区。比如分成/dev/vdb1,/dev/vdb2,/dev/vdb3等,每个分区可以指定大小。
如下可以看到/dev/vdb被分成了/dev/vdb1和/dev/vdb2两个分区。
2、创建分区
我们可以再在/dev/vdb磁盘上加个分区吗?当然是可以的。
在vdb上再添加创建vdb3分区:
第一步:编辑分区。执行命令fdisk /dev/vdb:该命令意思是为/dev/vdb磁盘进行分区或者说叫编辑/dev/vdb磁盘。
第二步:新建分区。输入n,回车,n(new的缩写)表示新建分区
第三步:分区类型。继续根据提示输入p(默认就是p),表示分区类型为主分区(需要看下主分区与扩展分区的区别)。
第四步:分区号。Partition number输入3
第五步:柱面。起始的柱面选择(应该是磁盘的概念,研究下),直接enter选择默认
第六步:设置磁盘大小,大小用+size(K,M,G),如+100G,表示分区大小设置为100G,+1G表示分区大小是1G
第七步:保存分区并退出:wq
以下案例是创建/dev/vdb1分区。由于是第一次创建分区,因此Partition number默认是第一块
实践:
四、磁盘格式化
第三步创建好了分区,但是分区需要格式化才能挂载使用。
linux提供了几种不同的格式化方式,可mk,tab补齐查看
格式化方式不同在于铺文件系统时的索引和链接划分不同
如本例选择mkfs.ext2格式化方式
如果选择mkfs.ext4格式化方式,则输入命令:mkfs.ext4 /dev/vdb3
如果是xfs文件系统,则mkfs.xfs /dev/vdb3
ext2,ext4,xfs等文件系统请看第五点。
验证格式化是否成功:
通过 df -T命令查看(注意,要先把分区挂载到目录,否则df -T命令看不到):
五、linux文件系统
centos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3。
ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统,是ext3文件系统的后继版本。
xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术。
xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁的细化做的也比较好
六、磁盘挂载
第四点对分区进行了格式化,那么我们要使用这个分区了!
怎么使用呢?当然是挂载到我们的目录使用啦!
所以步骤是:
第一步:创建目录,如mkdir -p /data
第二步:挂载。将/dev/vdb3分区挂载到/data上。即mount /dev/vdb3 /data
七、磁盘卸载
第六点讲了挂载,对应的还有卸载的命令。比如卸载/data,对应的命令为:umount /data。
我们可能会担心,数据丢失问题,这个其实不会。
因为卸载只是解除了/data目录与/dev/vdb3的绑定关系,之前的数据仍然存在/dev/vdb3分区中,并没有丢掉,所以我们只要重新挂载一下就行了。
第一步:卸载/data。umount /data。
第二步:创建新的挂载的目录。如mkdir -p /weiwei。
第三步:将/dev/vdb3挂载到/weiwei下。mount /dev/vdb3 /weiwei
我们进入到/weiwei会发现,原来/data中的数据文件都在/weiwei下了
八、swap分区
1、介绍
Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。
free -m:查看内存的命令可顺便查看是否有swap分区。wap空间为0则代表系统并没有开启swap分区。
swap分区创建有两种方式:
方式一:新建磁盘分区作为swap分区。和创建普通的磁盘分区类似。
方式二:用文件作为swap分区 (操作更简单)
注意:两种方式都必须用root权限,操作过程应该小心谨慎。
2、新建磁盘分区作为swap分区
- swapoff -a #停止所有的swap分区。如果我们需要增加 Swap 分区,则先关闭 Swap 分区。
- fdisk /dev/sdb:编辑磁盘
- 创建分区,这个过程和新建普通分区是一样的(这块待验证,也有是用t命令而非n)。
- mkswap /dev/sdb2 #格式化swap分区,这里的sdb2要看您加完后p命令显示的实际分区设备名
- swapon /dev/sdb2 #启动新的swap分区
- 配置系统启动时能自动启用这个交换分区。编辑/etc/fstab,加入:/dev/sdb2 swap swap defaults 0 0
3、用文件作为swap分区
1.创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
- 命令:dd if=/dev/zero of=/root/swapfile bs=1M count=1024
2.格式化为交换分区文件:
- mkswap /root/swapfile #建立swap的文件系统
3.启用交换分区文件:
- swapon /root/swapfile #启用swap文件
4.使系统开机时自启用,在文件/etc/fstab中添加一行:
- /root/swapfile swap swap defaults 0 0
九、lvm逻辑卷管理
以上说的/dev/vdb是磁盘,/dev/vdb1,/dev/vdb2是表示分区,都是物理概念。
LVM是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
其实我们很容易联想到K8S中PV(PersistentVolume)与PVC(PersistentVolumeClaim)的概念。他们都属于逻辑卷范畴。
十、磁盘相关命令
1、fdisk
fdisk -l 查看服务器挂载了多少个磁盘,以及每个磁盘的分区情况。
如下可知虚机挂载了4块磁盘,其中/dev/vda磁盘创建了两个分区。
fdisk /dev/vdb:该命令意思是为/dev/vdb磁盘进行分区或者说叫编辑/dev/vdb磁盘。
2、mount
mount -l 查看文件系统挂载情况
mount -a 依据配置文件/etc/fstab的内容,自动挂载。的意思是将/etc/fstab的所有内容重新加载。并自动挂载 /etc/fstab 里面的东西。
umount /data:是卸载/data目录之前挂载的分区。和mount意思正好相反。
3、df与du
df,全称:disk full,列出文件系统的整体磁盘使用量
df -h 查看文件系统挂载和资源使用情况
du,全称:disk used,检查磁盘空间使用量
如下:du -sh ./*
4、mkfs.ext4
mkfs.ext4命令是用于对磁盘设备进行Ext4格式化的操作。
类似的还有mkfs.ext4 /dev/vdb3
如果是xfs文件系统,则mkfs.xfs /dev/vdb3
5、lsblk
lsblk命令 的英文是“list block”,即用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系
注意:TYPE为part表示NAME对应的是分区,TYPE为disk,表示NAME对应的是硬盘。
十一、/etc/fstab
1、介绍
/etc/fstab是用来存放文件系统的静态信息的文件。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
显示分区的基本信息:lsblk -f
2、案例介绍
通过内核名称编写:
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda1 / ext4 defaults,noatime 0 1
/dev/sda2 none swap defaults 0 0
/dev/sda3 /home ext4 defaults,noatime 0 2
- <file systems> - 要挂载的分区或存储设备.
- <dir> - <file systems>的挂载位置。
- <type> - 要挂载设备或是分区的文件系统类型,支持许多种不同的文件系统:
ext2
,ext3
,ext4
,reiserfs
,xfs
,jfs
,smbfs
,iso9660
,vfat
,ntfs
,swap
及auto
。 设置成auto
类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。 - <options> - 挂载时使用的参数,注意有些mount 参数是特定文件系统才有的。一些比较常用的参数有:
auto
- 在启动时或键入了mount -a
命令时自动挂载。ro
- 以只读模式挂载文件系统。rw
- 以读写模式挂载文件系统。owner
- 允许设备所有者挂载.sync
- I/O 同步进行。async
- I/O 异步进行。dev
- 解析文件系统上的块特殊设备。nodev
- 不解析文件系统上的块特殊设备。suid
- 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。defaults
- 使用文件系统的默认挂载参数,例如ext4
的默认参数为:rw
,suid
,dev
,exec
,auto
,nouser
,async
.
- <dump> dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。
- <pass> fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。
3、编写规范
在 /etc/fstab
配置文件中你可以以三种不同的方法表示文件系统:内核名称(见案例介绍)、UUID 或者 label。使用 UUID 或是 label 的好处在于它们与磁盘顺序无关。如果你在 BIOS 中改变了你的存储设备顺序,或是重新拔插了存储设备,或是因为一些 BIOS 可能会随机地改变存储设备的顺序,那么用 UUID 或是 label 来表示将更有效。
UUID编写方式:
label编写方式:
十二、Linux磁盘名称
1、/dev/hda, /dev/hdb, /dev/sda, /dev/sdb, 他们之间有什么区别?
hda一般是指IDE接口的硬盘,hda指第一块硬盘,hdb指第二块硬盘,等等;
sda一般是指SATA接口的硬盘,sda指第一块硬盘,sdb指第二块硬盘,等等。
一般来说,vda,vdb为虚拟磁盘;真机中第一块磁盘为sda,第二块为sdb;
十三、实践
实践机器:88那台测试机
针对/vdb盘进行分区,分别挂载到不同的/data目录,最终结果如下:
分区后:
过程中遇到的问题:
1、fdisk最后一步需要输入:wq,输入lsblk是看不出效果的,需要重启虚拟机:reboot;
2、一开始/data目录直接挂载在硬盘/vdb上,所以需要先卸载/data, 但是在卸载/data的时候遇到个问题,/data正在被占用,无法卸载,报错如下:意思是/data正在被占用,因此不能卸载,此时我们就需要将正在占用该磁盘数据的进程全都kill掉,就可以正常解除挂载了。最终通过fuser命令解决。
- fuser -mv /data:查看哪个进程占用
- fuser -km /data:kill掉此进程
- umount /data:再次执行卸载即可
解决方式参考:umount target is busy挂载盘无法卸载的解决办法 - 灰信网(软件开发博客聚合)
卸载报错:
未分区前:
3、挂载前一定要mkfs格式化文件系统,否则会报错
参考:https://blog.csdn.net/qq_31319235/article/details/118784703
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)