Linux_day04_03_磁盘管理和Linux文件系统管理

磁盘管理和Linux文件系统管理

1. 磁盘管理

基础知识

Linux系统“一切皆文件”

  • 块设备:block,存取单位为块,硬盘
  • 字符设备:char,存取单位为字符

设备文件:关联至一个设备驱动程序,进而能够与之对应的硬件设备进行通信。

设备号码

  • 主设备号码:标识设备类型
  • 次设备号码:识别同一设备类型下的不同设备

设备号例如sda、sdb等,其中d标识设备类型,a、b标识同一设备类型下的不同设备

磁盘设备命名规则

  • 不同硬盘设备类型
    • IDE:hd
    • SCSI:SATA、SAS、USB:/dev/sd
    • 虚拟设备:vd
  • 硬盘接口类型
    • 并行
      • IDE:133M/S
      • SCSI:64M/S
    • 串行
      • SATA:6G/S(6Gbps)
      • SAS:6G/S(6Gbps)
      • USB:480M/S(480Mbps)
  • 同一设备类型下的不同设备:a-z(sda、sdb、sdc等)
  • 同一设备下的不同分区:1,2,3…(sda1、sda2等)

分区方式

  • MBR:使用32位标识扇分区,分区不超过2T,按柱面进行分区,4个主分区(3个主分区+1个逻辑分区)+1个扩展分区(N个逻辑分区)
  • GPT:支持128个分区,使用64位,使用128位UUID表示磁盘和分区,GPT分区表自动备份在头和尾两份
分区管理命令

fdisk命令:创建和维护分区表

对于一块硬盘来说最多管理15个分区

格式:fdisk 磁盘名(/dev/sd*)
命令(输入 m 获取帮助):m
命令操作:

  • d 删除分区
  • l 列出分区id
  • m 帮助
  • n 创建分区
  • p 打印分区
  • q 直接退出
  • t 调整分区类型
  • w 保存

parted命令
格式:parted 选项 设备名 命令
parted 设备 mklabel gpt…
parted 设备 print
parted 设备 mkpart primary 1 200M
parted 设备 rm 1

注意:parted操作都是实时生效的,小心使用

查看分区
cat /proc/partitions:查看内核是否已经识别新的分区
partx -a:通知内核重新读取硬盘分区表
partprobe:在不重启的情况下重读分区,当出现删除文件后,会出现仍然占用空间的现象。

2. Linux文件系统管理

文件系统基础知识
  • Linux文件系统:ext2、ext3、ext、xfs、btrfs、reiserfs、jfs、swap(交换分区)、iso9660(光盘)
  • Windows文件系统:fat、ntfs
  • Unix文件系统:FFS、UFS、JFS2
  • 网络文件系统:NFS、CIFS、ISCSI
  • 集群文件系统:GFS2、OCFS2
  • 分布式文件系统:ceph

根据是否支持日志分类

  • 日志型文件系统:ext3,ext4,xfs
  • 非日志型文件系统:ext2,vfat

根据文件系统的组成部分分类

  • 内核中的模块:ext4,xfs,vfat
  • 用户空间的管理工具:mkfs、ext4、xfs、mkfs、vfat
  • linux的虚拟文件系统:VFS
文件系统管理命令

①mkfs命令:格式化磁盘分区(为分区指定文件系统)
用法:mkfs.FS_TYPE
FS_TYPE:文件类型

mkfs.btrfs  mkfs.cramfs  
mkfs.ext2  mkfs.ext3  mkfs.ext4  
mkfs.minix  mkfs.xfs

-t:设置卷标

②mke2fs命令:ext系列文件系统专用管理命令

  • -t:ext2、ext3、ext4
  • -b:1024、2048、4096
  • -L:卷标
  • -j:相当于-t ext3

mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

  • -I:为数据空间中每多少个字节创建inode,此大小不应该小于block的大小
  • -N:为数据空间创建多少个inod结点
  • -m:为管理人员预留的空间占据百分比
  • -o:启用指定特性

mkswap命令

swap分区:通常称为交换分区,是一块特殊的磁盘空间。当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。

案例1:创建swap分区

  • 第一步:新建磁盘分区
fdisk /dev/sdb
partprobe
  • 第二步:格式化swap分区
mkswap /dev/sdb3
  • 第三步:启用swap分区(关闭是swapoff)
swapon /dev/sdb3
  • 第四步:查看swap分区信息
free -h
文件系统挂载

挂载:将一个设备(通常是存储设备)挂载到一个已经存在的目录上。我们要访问存储设备的文件,必须将文件所在的分区挂载到一个已经存在的目录,然后通过那个目录来访问存储设备。

挂载点下面的所有原文件在挂载后都会完成临时隐藏

解除此关联关系的过程:卸载,umount

mount命令
使用方法:
mount 选项 设备(指明要挂载的设备) 挂载点(事先存在,建议使用空目录)
常用参数:

  • -t:指定要挂载的设备上的文件系统
  • -r:以只读的方式挂载
  • -w:以读写的方式挂载
  • -n:不更新/etc/mtab
  • -L:以卷标指定挂载设备
  • -U:以UUID指定挂载设备
  • -B:捆绑目录到另一个目录上
  • -a:自动挂载所有支持自动挂载的设备(定义在/etc/fstab文件)

    blkid可查看UUID
    修改/etc/fstab文件实现永久挂载

umount命令
使用方法:
umount 设备名(卸载不掉正在使用的磁盘)
umount -a:卸载所有挂载的设备(卸载不掉正在使用的磁盘)

案例2:永久挂载/dev/sdb1

  • 第一步:使用blkid查看uuid
    blkid (磁盘):不指定磁盘则显示所有
blkid /dev/sdb1
  • 第二步:将挂载信息写到/etc/fstab上
vim /etc/fstab
UUID="e7e56e3a-d86f-46c9-9cf0-b29668105754" /mnt xfs defaults 0 0

UUID 挂载点 文件系统 参数 能否被dump备份命令作用 是否检验扇区

  • 第三步:挂载
mount -a
  • 第四步:查看挂载是否成功
df -Th

案例3:创建并使用一块分区地完整步骤

  • 第一步:在虚拟机中添加一块硬盘
  • 第二步:使用fdisk命令创建分区,改变分区的类型(默认Linux文件)
fdisk /dev/sdc
  • 第三步:使用分区管理软件进行分区文件系统格式化(mkfs.等)
mkfs.xfs /dev/sdc
  • 第四步:挂载到指定挂载点
mount -a
  • 第五步:验证
df -Th
相关命令

free命令:查看内存的相关信息

  • -m:以mb为单位
  • -g:以gb为单位
  • -h:以符合人类阅读习惯的方式显示单位

df命令:查看文件系统占用信息

  • -h:以符合人类阅读习惯的方式显示单位
  • -i:以inode代替block
  • -T:打印文件系统类型

du命令:查看目录总体空间占用状态

  • -h:以符合人类阅读习惯的方式显示单位
  • -s:进行汇总

dd命令:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
使用方法:

dd if=/path/from/src of=/path/to/dest
  • bs:复制单元大小
  • count:复制多少个bs

磁盘拷贝

dd if=/dev/sdb1 of=/dev/sda1

备份MBR(Master Boot Record, 硬盘的主引导记录)

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
两个特殊设备

吐零机:可以不断向外输出0
/dev/zero
垃圾桶:可以吞噬一切数据
/dev/null

面试题

Buff(Buffer)和Cache的区别

  1. Buffer:

    • 缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据
    • buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。
    • buffer将数据缓冲下来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。
    • 例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。
  2. Cache:

    • 缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器。

    因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能

    • cache实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。
    • Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能

CPU ===> 内存 ===>磁盘 (buffer)

CPU <=== 内存 <===磁盘 (cache)

buffer和cache的特点

  • 相同点:
    • 都属于内存,数据都是临时的,关机数据都会丢失
  • 不同点:
    • buffer是要写入数据;cache是已读取数据
    • buffer数据丢失会影响数据完整性,源数据不受影响;cache数据丢失不会影响数据完整性,但会影响性能。
    • 一般来说cache越大,性能越好,超过一定程度,导致命中率太低之后才会越大性能越低;buffer来说,空间越大性能影响不大,够用就行
    • cache过小,或者没有cache,不影响程序逻辑(高并发cache过小或者丢失导致系统忙死除外);buffer过小有时候会影响程序逻辑,如导致网络丢包。
    • cache可以做到应用透明,编写应用的可以不用管是否有cache,可以在应用做好之后再上cache,当然开发者显式使用cache也行。buffer需要编写应用的人设计,是程序的一部分。

猜你喜欢

转载自blog.csdn.net/qq_44924544/article/details/108872732