磁盘
磁盘由多个盘片组成,每个盘片正反两面皆可读写,由磁头将盘片表面的磁性颗粒改变磁性,来完成读写。
磁盘在出厂的时候,盘片上有划分好的多个同心圆环,数据就在圆环上的磁性颗粒保存,而这样的圆环就是磁道。
每个盘面都有许多的磁道,肉眼不可见,磁道又划分为多个扇区,每个扇区可存储大小为512字节。
柱面是一个抽象的概念,多个盘面相同位置垂直区域的磁道称之为柱面,数据存储在相同半径的磁道上的扇区内,读写时,可减少磁头寻道时间
磁头是盘片磁道上面负责读写的金属块
磁盘命名
物理机上的磁盘命名为sda(a为一个磁盘,后续的按照字母向后划分如sdb、sdc),磁盘后面会跟上数字1、2、3等,为在此磁盘划分的分区,如sdb2就是第二块磁盘的2分区。
虚拟服务器的命名方式和物理机基本一样,但是sda的s换成了v,也就是vda。
分区管理
分区主要是为了对数据的分类别存储,便于管理,分区有MBR、GPT两种方式,只有分区后,且对相应的分区进行格式化后,才可正常挂载。
MBR最多可以分4个主分区,又或者3个主分区,和在第4分区下的扩展分区。
fdisk /dev/sdb
n 添加新的分区
p 查看当前分区
d 删除分区
w 保存
m 显示帮助
q 退出
GPT支持分配128个主分区
gdisk /dev/sdb
#命令和fdisk基本相同。不过此处、
? 显示帮助
mkfs 格式分区,可以针对整个磁盘,或单个分区进行操作,一般情况下不要直接格式化整个磁盘(会将所有的分区都格式没了),分区后再格式化,区头会预留交换空间
#ex2、ext3、ext4,格式磁盘为指定类型
mkfs.ext4 /dev/sdb
#xfs格式化分区为指定类型
mkfs.xfs /dev/sdb
#指定一个数据块的大小4096字节=4k
mkfs.xfs -b size=1024 /dev/sdb2
#强制格式化
mkfs -f /dev/sdb
挂载
临时挂载
mount /dev/sdb1 /test
将分区入口挂载到test目录下,此后载该目录下的所有存储读取等操作,相当于都是在
sdb1里面进行的
-t 指定文件系统挂载分区
-a 检查并挂载/etc/fstab配置文件中未挂载的设备
-o 指定挂载参数 ro 只读,rw读写
卸载
umount /dev/sdb1
#将此分区卸载
这些都是临时的操作,可以在etc/fstab更改文件内容,进行配置
#
# /etc/fstab
# Created by anaconda on Mon Jul 5 20:00:37 2021
#
# 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=7f59131b-e148-4e00-a283-564047f809d7 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 data xfs defaults 0 0
#第一列要挂载的设备
#第二列挂载入口目录
#第三列分区类型
#第四列默认挂载参数
#async/sync 使用异步或同步方式存储数据,默认异步
#user/nouser 是否允许普通用户使用mount命令挂载,默认nomount
#exec/noexec 是否允许可执行文件执行,默认exec
#suid/nosuid 是否允许存在suid文件,默认suid
#auto/noauto 执行mount -a 命令时,此文件系统是否被挂载,默认auto
#rw/ro 是否以只读或者读写模式进行挂载,默认rw
#defaults 具有rw,suid,exec,dev,auto,nouser,async
#第五列是否每天备份 0不备份 1每天备份 2不定时备份
#第六列 是否每次开机检查磁盘 0不检查1检查2双重效验
按照上面的配置照抄即可
写入完成后可mount -a 测试检查写入的内容是否出错
#检查etc/fstab文件并挂载可挂载的所有分区
mount -a
swap
swap虚拟内存,当物理内存条不足时可以使用(物理内存在不足时,会随机kill一个正在进行中的进程来释放内存,而且内存溢出时可能导致各种命令无法正常使用,系统会报oom异常),swap来充当内存来使用,但是此法很慢,毕竟是使用磁盘来冲当的内存。
mkswap /dev/sdb1
#格式化为swap分区
free -m
#查看swap分区大小
swapon /dev/sdb1
#扩展swap分区
swapon -a
#添加所有swap分区
swapoff /dev/sdb1
#关闭某个swap分区
swapoff -a
#关闭所有swap分区
inode和block
为了简化磁盘使用过程,操作系统提供了一个辅助系统FS(文件系统)
磁盘默认分为两个存储区域,一类是存储元数据Inode,每个Inode block块128bit,一类是存储真实数据的block,每个block占用4kb,当block内写有数据被标记使用后,都有Inode block关联并记录该block对应的文件和block在磁盘内的位置。
如果碰到磁盘内存储的文件大部分都是小文件,占用空间小,但文件数量多,可能导致明明内存还有,但就是无法创建文件夹,并报错,容量不足,这就是Inode编号已经被占用完了,没有可用的Inode编号给新的文件使用。所以为了预防此问题的发生,可以在建立分区前就调整Inode的数量
在工作中,可能碰到磁盘损坏的问题,可以使用
xfs_repair /dev/sdb1
#修复磁盘,但也有可能无法修复
-L 修复失败时可以尝试强制修复,但强制修复可能会造成部分数据丢失,不建议使用