磁盘管理

计算机硬盘

  • 硬盘是计算机主要媒介之一,由一个或多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料,硬盘内部由磁道、柱面、扇区、磁头等部件组成


    image.png
image.png
  • Linux系统中硬件设备相关配置文件存放在/dev下,常见硬盘命名为/dev/hda、/dev/sda、/dev/sdb、/dev/sdc、/dev/vda.不同硬盘接口,在系统中识别的设备名称不一样
  • IDE硬盘接口在Linux中设备名为/dev/hda,SAS、SCSI、SATA硬盘接口在Liunx设备名为sda,高效云盘硬盘接口会识别为/dev/vda等
  • 硬盘的最小存储单位叫作sector(扇区),每个sector存储512字节,操作系统在读取硬盘的时候,不会逐个sector地去读取,这样效率非常低,为了提升效率,操作系统会一次性连续读取多个sector,即一次性读取多个sector称为block(块)
  • 由多个sector组成的block是文件存取的最小单位.block的大小常见的有1KB、2KB、4KB,在Linux中常设置为4KB,即连续8个sector组成一个block
  • /boot分区的block一般为1KB,而/data分区或者/分区的block为4KB
# 查看block和inode大小
[root@ali ~]# dumpe2fs /dev/vda1|grep "Block size"
dumpe2fs 1.42.9 (28-Dec-2013)
Block size:               4096
[root@ali ~]# tune2fs -l /dev/vda1|grep "Block size"
Block size:               4096
[root@ali ~]# tune2fs -l /dev/vda1|grep "Inode size"
Inode size:           256
[root@lianxi ~]# stat /boot/|grep "IO Block"
Size: 4096      Blocks: 8          IO Block: 4096   directory
  • 创建一个普通10B大小的文件,系统默认设置block为4KB,如果有一万个小文件,由于每个block只能存放一个文件,如果文件的大小比block大,会申请更多的block.相反如果文件的大小比默认block小,仍会占用一个block,这样剩余的空间会被浪费掉

硬盘block及inode

  • 操作系统对于文件数据的存放包括两个部分:一是文件内容;二是权限及文件属性.操作系统文件存放是基于文件系统,文件系统会将文件的实际内容存储到block中,而将权限与属性等信息存放至inode中
  • 在硬盘分区中,还有一个超级区块(superblock),superblock会记录整个文件系统的整体信息,包括inode、block的总量、使用大小、剩余大小等信息.每个inode与block都有编号对应,方便Linux系统快速定位查找文件
    • superblock:记录文件系统的整体信息,包括inode与block的总量、使用大小、剩余大小以及文件系统的格式与相关信息
    • block:存储文件的内容,如果文件超过默认block大小,会自动占用多个block
    • inode:记录文件的属性、权限,同时会记录该文件的数据所在的block编号
  • 每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码.如果能够找到文件的inode,就可以找到该文件所放置数据的block号码,从而读取该文件内容
  • 操作系统进行格式化分区时,操作系统自动将硬盘分成两个区域.一个是数据区,用于存放文件数据,另一个是inode table区,用于存放inode包含的元信息
  • inode默认为128KB或256KB,/boot分区inode默认为128KB,其他分区默认为256KB
# 查看Linux系统inode方法
dumpe2fs /dev/vda1|grep "Inode size"
tune2fs -l /dev/vda1|grep "Inode size"
stat /boot/|grep "Inode"
#格式化磁盘时,可以指定inode个block的大小;-b指定默认block,-I指定默认inode值
mkfs.ext4 -b 4096 -I 256 /dev/sdb

硬链接

  • 一般情况下,文件名和inode编号是一一对应的关系,每个inode号码对应一个文件名,但UNIX/Linux系统多个文件名也可以指向同一个inode号码.这意味着可以用不同的文件名访问通用的内容,对文件内容进行修改,会影响到所有文件名.但删除一个文件名,不影响另一个文件名的访问.这种情况称为硬链接(hard link)
# 创建硬链接
ln test1.txt test2.txt
# test1.txt为源文件 test2.txt为目标文件
[root@lianxi tmp]# ll -i
total 0
67193826 -rw-r--r--. 1 root root 0 May 23  2020 music.txt.bak
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test1.txt
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test2.txt
  • 实用技巧:硬链接不能跨分区链接,硬链接只能对文件生效,对目录无效,也即是目录不能创建硬链接.硬链接源文件与目标文件公用一个inode值,从某种意义上来说,节省inode空间.不管是单独删除源文件还是删除目标文件,文件内容始终存在.链接后的文件不占用系统多余的空间

软链接

  • 文件1和文件3的inode虽然不同,但是文件3的内容是文件1的路径.读取文件3时,系统会自动将访问者导向文件1.
  • 无论打开哪一个文件,最终读取的文件都是文件1.这时,文件3就称为文件1的软链接(soft link)或者符号链接(symbolic link)
[root@lianxi tmp]# ln -s test1.txt test3.txt
[root@lianxi tmp]# ll -i
total 0
67193826 -rw-r--r--. 1 root root 0 May 23  2020 music.txt.bak
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test1.txt
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test2.txt
67193825 lrwxrwxrwx. 1 root root 9 Feb  8 16:25 test3.txt -> test1.txt
  • 实用技巧:软链接可以跨分区链接,软链接支持目录同时也支持文件的链接.软链接文件与目标文件inode不同,从某种意义上说,会消耗更多的inode空间.不管是删除源文件还是重启系统,该软链接还存在,但是文件内容会丢失,一旦新建源同名文件,软链接文件恢复正常

Linux下磁盘实战操作

  • 由于磁盘空间不足,需添加新硬盘,新添加的硬盘需要经过格式化、分区才能被Linux系统所使用.操作流程如下:

    • 1.检测Linux系统识别的硬盘设备,新添加硬盘会被识别为/dev/sdb,如果有多块硬盘会被识别为/dev/sdc、/dev/sdd等设备名称
image.png
  • 2.基于新硬盘/dev/sdb设备,创建磁盘分区/dev/sdb1
image.png
  • 3.fdisk分区命令参数如下,常见参数包括m、n、p、d、w
    • b:编辑bsd disklabel(磁盘标签)
    • c:切换dos兼容性标志
    • d:删除一个分区
    • g:创建一个新的空GPT分区表
    • G:创建一个IRIX(SGI)分区表
    • l:列出已知的分区类型
    • m:打印帮助菜单
    • n:添加一个新分区
    • o:创建一个新的空DOS分区表
    • p:打印分区表信息
    • q:退出不保存
    • s:创建一个新的空sun磁盘标签
    • t:更改分区的系统ID
    • u:更改显示/输入单元
    • v:验证分区表
    • w:将分区表写入磁盘并退出
    • x:额外功能
  • 4.创建/dev/sdb1分区方法,执行fdisk /dev/sdb,然后按屏幕提示一次输入n、p、1,按Enter键,再输入+10G,按Enter键,输入w,最后执行fdisk -l查找磁盘信息
image.png
image.png
  • 5.mkfs.ext4 /dev/sdb1 格式化磁盘分区
image.png
  • 6./dev/sdb1 分区格式化,使用mount命令挂载到/data目录,命令详解为
    • mkdir -p /data:创建/data数据目录
    • mount /dev/sdb1 /data:挂载/dev/sdb1分区至/data目录
    • df -h:查看磁盘分区详情
    • echo "mount /dev/sdb1 /data" >> /etc/rc.local:将挂载分区命令加入/etc/rc.local开机启动
image.png
  • 7.自动挂载分区除了可以加到/etc/rc.local开机启动之外,还可以加到/etc/fstab文件中
image.png
mount -o rw,remount /
# 表示重新挂载/系统,检测/etc/fstab是否有误

基于GPT格式磁盘分区

  • MBR分区标准决定了MBR只支持在2TB以下的硬盘分区,为了能支持使用大于2TB硬盘空间,需使用GPT格式进行分区.创建大于2TB的分区,需使用parted工具
  • 基于GPT格式对10TB硬盘进行分区,操作如下:
    1. parted -s /dev/sdc mklabel gpt:设置分区类型为gpt格式
    2. mkfs.ext3 /dev/sdc:基于ext3文件系统类型格式化
    3. mount /dec/sdc /data:挂载/dev/sdc设备至/data
  • 假设/dev/sdc为10TB硬盘,使用GPT格式来格式化磁盘
image.png
  • 执行命令parted -s /dev/sdc mklabel gpt
image.png
image.png
  • 基于mkfs.ext3 /dev/sdc格式化磁盘,parted命令行也可以进行分区,依次输入如下命令:
    • parted→select /dev/sdc→mklabel gpt→mkpart primary 0 -1→print
    • mkfs.ext3 /dev/sdc
    • mount /dev/sdc1 /data
image.png
image.png
image.png
image.png
image.png

mount命令

  • mount命令工具主要用于将设备或者分区挂载至Linux系统目录下,Linux系统在分区时,基于mount机制将/dev/sda分区挂载至系统目录,将设备与目录挂载之后,Linux系统方可进行文件的读取和存储
参数选项 解释说明
-V 显示mount工具版本号
-l 显示已加载的文件系统列表
-h 显示帮助信息并退出
-v 输出指令执行的详细信息
-n 加载没有写入文件/etc/mtab中的文件系统
-r 将文件系统加载为只读模式
-a 加载文件/etc/fstab中配置的所有文件系统
-o 指定mount挂载扩展参数,常见扩展指令rw、remount、loop等
-o atime 系统在每次读取文档时更新文档时间
-o noatime 系统在每次读取文档时不更新文档时间
-o defaults 使用预设的选项rw,suid,dev,exec,auto,nouser等
-o exec 运行执行档被执行
-o user、-o nouser 使用者可以执行mount/umount的动作
-o remount 将已挂载的系统分区重新以其他模式再次挂载
-o ro 只读模式挂载
-o rw 可读可写模式挂载
-o loop 使用loop模式,把文件当成设备挂载至系统目录
-t 指定mount挂载设备类型,常见类型有nfs、ntfs-3g、vfat、iso9660等,如下面:
iso9660 光盘或光盘镜像
msods Fat16文件系统
vfat Fat32文件系统
ntfs ntfs文件系统
ntfs-3g 识别移动硬盘格式
smbfs 挂载Windows文件网络共享
nfs UNIX/Linux文件网络共享
mount /dev/sdb1 /data  # 挂载/dev/sdb1分区至/data目录

mount /dev/cdrom /mnt  # 挂载/dev/cdrom分区至/mnt目录

mount -t ntfs-3g /dev/sdc /data1  # 挂载/dev/sdc移动硬盘至/data1目录

mount -p remount,rw /  # 重新以读写模式挂载/系统

mount -t iso9660 -o loop centos7.iso /mnt  # 将Centos7.iso镜像文件挂载至/mnt目录

mount -t fat32 /dev/sdd1 /mnt  # 将U盘/dev/sdd1挂载至/mnt目录

mount -t nfs 192.168.1.11:/data /mnt  # 将远程192.168.1.11:/data目录挂载至本地mnt目录

Linux硬盘故障修复

  • 操作系统的分区变成只读文件系统,错误提示为Read-only file system.出现只读文件系统会导致只能读取而无法写入新文件、新数据等操作

  • 造成该问题的原因包括:磁盘老旧长期大量的读写、文件系统文件被破坏、磁盘碎片文件、异常断电、读写终端等

  • 修复步骤:

    1. 远程备份本地其他重要数据,出现只读文件系统,需先备份其他重要数据,基于rsync|scp远程备份,其中/data为源目录,/data/backup/2020为目标备份目录
    rsync -av /data [email protected]:/data/backup/2020
    
    1. 可以重新挂载/系统,挂载命令如下,测试文件系统是否可以读写
    mount -o remount,rw /
    
    1. 如果重新挂载/系统无法解决问题,则重启CD/DVD光盘引导进入Linux Rescue修复模式.光标选择Troubleshooting,按Enter键,然后选择Rescue a CentOS system,按Enter键
    2. 选择1)"continue"继续操作
    3. 进入修复模式,执行chroot /mnt/sysimage ,df -h显示原来的文件系统
    chroot /mnt/sysimage
    df -h
    
    1. 对异常的分区进行检测并修复,根据文件系统类型执行
    umount /dev/sda3
    fsck.ext4 /dev/sda3 -y
    
    1. 修复完成后重启系统
    reboot
    

你可能感兴趣的:(磁盘管理)