Linux磁盘与文件系统管理

时间:2022-08-18 18:29:31

Linux磁盘管理


硬盘的物理组成

柱面

硬盘与读存数据相关的部件:圆形硬盘片(一或多个)、磁头、机械臂。 硬盘片上有磁道,多个硬盘片上的同一磁道形成柱面,这个柱面就是分区时形成的最小单位,windows的C盘(系统盘)分区就是在最外层的一堆柱面上。

Linux磁盘与文件系统管理

扇区

硬盘上的最小存储单位叫扇区,每个扇区储存512字节。在读取数据的时候,硬盘会转动,利用机械手臂将磁头移动到正确的数据位置,然后将数据顺序读出。

Linux磁盘与文件系统管理

硬盘的类型/dev/sda VS /dev/hda

HDA是使用了ide接口的硬盘的名称.SDA是sata接口的硬盘的名称

硬盘接口

我们通过硬盘接口来区分不同的硬盘,不同厂商生产的硬盘都要通过sata接口接入到主板的sata控制器上。使用SATA(Serial ATA)口的硬盘又叫串口硬盘,是未来和现在PC机硬盘的主流趋势。 硬盘接口有: 并口:(数据传输有n根线并行传输) IDE(电子集成驱动器):133M/S SCSI(小型计算机系统接口):640M/S 串口:(数据传输有一根线按顺序传输) SATA(串口硬盘接口):6Gbps SAS(串行连接SCSI):6Gbps USB:480MB/s

分区和目录关系

  • 任何一个分区都必须挂载到某个目录上。
  • 目录是逻辑上的区分。分区是物理上的区分。
  • 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
  • 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。 Linux磁盘与文件系统管理

分区

为什么要分区

  • 可以把不同资料,分别放入不同分区中管理,降低风险。
  • 大硬盘搜索范围大,效率低
  • 磁盘配合只能对分区做设定
  • /home /var /usr/local经常是单独分区,因为经常会操作,容易产生碎片

分区的要点:

记录每一个分区的起始和结束柱面。分区的起始和结束柱面的数据放在主导区(Master Boot Recorder,MBR)。MBR不属于任何分区,计算机启动后最先读取主导区,这个区域记录硬盘的分区信息。MBR的限制是不能存储所有的分区和引导程序的信息,最多提供4个分区的记忆。

MBR处在0sector,分为三个部分:
    446bytes:boot loader程序,引导启动操作系统程序
    64bytes:FAT文件系统分区表,每16个字节表示一个分区
    2bytes:MBR区域的有效性标识,55AA表示为有效

Linux磁盘与文件系统管理

分区管理fdisk命令

分区类别:
Linux磁盘与文件系统管理

查看:fdisk -l [DEVICE] 创建分区:fdisk [DEVICE] 查看内核是否识别新的分区:cat /proc/partitions 对于已经有分区处于使用的磁盘来说,新建分区要让内核重读分区:

centos5之上:
    #partprobe [DEVICE]
centos 6和7:
    #part -a [DEVICE]
    #kpartx -af [DEVICE]

n:新建分区

p:显示分区表

d:删除分区

b:设置卷标

w:写入分区表

t:改变分区文件系统类型

l:显示fdisk所支持的文件系统代码

q:退出

文件系统管理

文件系统分类

常用的Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap

交换文件系统:swap

网络文件系统:nfs,smbfs

光盘文件系统:isso9660

文件系统的物理结构

Linux磁盘与文件系统管理

super block:超级块的作用是存储文件系统大小、有多少是空的和已经填满的占多少,以及它们各自的总数和其他信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块。所以超级块坏了,磁盘就没救了。

文件系统大小
空闲块数目
空闲块索引表
空闲i节点数
空闲i节点索引表
……

文件存储结构

Linux正统的文件系统(如ext2、ext3)一个文件由目录项、inode和数据块组成。

  • 目录项:包括文件名和inode节点号。

  • Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。

  • 数据块:文件的具体内容存放地。 Linux磁盘与文件系统管理

文件系统管理

文件系统管理工具

  1. 创建文件系统的工具

    mkfs
    mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
    
  2. 检测及修复文件系统的工具

    fsck
    fsck.ext2, fsck.ext3, ...
    
  3. 查看其属性的工具

    dumpe2fs, tune2fs
    
  4. 调整文件系统特性:

    tune2fs
    

ext系列文件系统的管理工具:

  1. 创建文件系统的工具

    mkfs
    mkfs.ext2, mkfs.ext3, mkfs.ext4
    mkfs -t ext4=mkfs.ext4
    
  2. ext系列文件系统专用管理工具

    mke2fs [OPTIONS]  device
    -t {ext2|ext3|ext4}:指明要创建的文件系统类型
        mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
    -b {1024|2048|4096}:指明文件系统的块大小;
    -L LABEL:指明卷标;
    -j:创建有日志功能的文件系统ext3;
        mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3
    -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode; 
    -N #:直接指明要给此文件系统创建的inode的数量;
    -m #:指定预留的空间,百分比;
    
    -O [^]FEATURE:以指定的特性创建目标文件系统; 
    

    e2label命令:卷标的查看与设定
        查看:e2label device
        设定:e2label device LABEL

    tune2fs命令:查看或修改ext系列文件系统的某些属性 
        adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;
        注意:块大小创建后不可修改;

    tune2fs [OPTIONS] device
    -l:查看超级块的内容;

    修改指定文件系统的属性:
    -j:ext2 --> ext3;
    -L LABEL:修改卷标;
    -m #:调整预留空间百分比;
    -O [^]FEATHER:开启或关闭某种特性;

    -o [^]mount_options:开启或关闭某种默认挂载选项
        acl
        ^acl

dumpe2fs命令:显示ext系列文件系统的属性信息
            dumpe2fs  [-h] device   

e2fsck : check a Linux ext2/ext3/ext4 file system
    e2fsck [OPTIONS]  device
        -y:对所有问题自动回答为yes; 
        -f:即使文件系统处于clean状态,也要强制进行检测;

fsck:check and repair a Linux file system
    -t fstype:指明文件系统类型;
            fsck -t ext4 = fsck.ext4
    -a:无须交互而自动修复所有错误;
    -r:交互式修复;   

blkid命令:
    blkid device
    blkid  -L LABEL:根据LABEL定位设备
    blkid  -U  UUID:根据UUID定位设备 

swap文件系统:

Linux上的交换分区必须使用独立的文件系统;
    且文件系统的System ID必须为82;

创建swap设备:mkswap命令
    mkswap [OPTIONS]  device
        -L LABEL:指明卷标
        -f:强制


启用:swapon
        swapon  [OPTION]  [DEVICE]
            -a:定义在/etc/fstab文件中的所有swap设备;

禁用:swapoff
        swapoff DEVICE

文件系统的使用:

文件系统的使用首先要挂载:mount命令和umount命令。根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”

挂载点:mount_point,用于作为另一个文件系统的访问入口;

    (1) 事先存在;
    (2) 应该使用未被或不会被其它进程使用到的目录;
    (3) 挂载点下原有的文件将会被隐藏;

mount命令:

mount  [-nrw]  [-t vfstype]  [-o options]  device  dir

命令选项:
-r:readonly,只读挂载; 
-w:read and write, 读写挂载; 
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;

-t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;

-L LABEL:挂载时以卷标的方式指明设备;
        mount -L LABEL dir

-U UUID:挂载时以UUID的方式指明设备;
        mount -U UUID dir

-o options:挂载选项
    sync/async:同步/异步操作;
    atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
    diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
    remount:重新挂载; 
    acl:支持使用facl功能;
            # mount -o acl  device dir 
            # tune2fs  -o  acl  device 

    ro:只读 
    rw:读写 
    dev/nodev:此设备上是否允许创建设备文件;
    exec/noexec:是否允许运行此设备上的程序文件;
    auto/noauto:
    user/nouser:是否允许普通用户挂载此文件系统;
    suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;                  

    defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.

查看当前系统所有已挂载的设备:

# mount 
# cat  /etc/mtab
# cat  /proc/mounts

umount命令:

umount  device|dir

注意:正在被进程访问到的挂载点无法被卸载;
查看被哪个或哪些进程所战用:
# lsof  MOUNT_POINT
# fuser -v  MOUNT_POINT

终止所有正在访问某挂载点的进程:
# fuser  -km  MOUNT_POINT

设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件,该文件的语法格式如下:

每行定义一个要挂载的文件系统及相关属性:

    6个字段:
    (1) 要挂载的设备:
        设备文件;
        LABEL
        UUID
        伪文件系统:如sysfs, proc, tmpfs等
    (2) 挂载点 
        swap类型的设备的挂载点为swap;
    (3) 文件系统类型;
    (4) 挂载选项
        defaults:使用默认挂载选项;
    如果要同时指明多个挂载选项,彼此间以事情分隔;
        defaults,acl,noatime,noexec
    (5) 转储频率
        0:从不备份;
        1:每天备份;
        2:每隔一天备份;
    (6) 自检次序
        0:不自检;
        1:首先自检,通常只能是根文件系统可用1;
        2:次级自检
        ...

    mount  -a:可自动挂载定义在此文件中的所支持自动挂载的设备;

文件系统挂载使用:

挂载光盘设备:
    光盘设备文件:
        IDE: /dev/hdc
        SATA: /dev/sr0

        符号链接文件:
            /dev/cdrom
            /dev/cdrw
            /dev/dvd
            /dev/dvdrw

    mount -r /dev/cdrom /media/cdrom
    umount /dev/cdrom

dd命令:convert and copy a file
    用法:
        dd if=/PATH/FROM/SRC of=/PATH/TO/DEST 
            bs=#:block size, 复制单元大小;
            count=#:复制多少个bs;

        磁盘拷贝:
            dd if=/dev/sda of=/dev/sdb

        备份MBR
            dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

        破坏MBR中的bootloader:
            dd if=/dev/zero of=/dev/sda bs=256 count=1

    两个特殊设备:
        /dev/null: 数据黑洞;
        /dev/zero:吐零机;


挂载点和/etc/fstab

作用:

  1. 配置文件系统体系
  2. 被mount、fsck和其他程序使用
  3. 系统重启时保留文件系统体系
  4. 可以在设备栏使用文件系统卷边
  5. 使用mount -a 命令挂载/etc/fstab中所有的文件系统

实例演示:

增加两个逻辑分区,一个交换分区,并配置到/etc/fstab下

1.查看分区情况:fdisk -l Linux磁盘与文件系统管理2.建立两个逻辑分区,过程省略

3.建立交换分区

查看swap大小(free -k|-m|-G) Linux磁盘与文件系统管理创建一个swap分区 Linux磁盘与文件系统管理

这是创建了1个一个扩展分区,三个逻辑分区,现在将sda7转化为swap分区 Linux磁盘与文件系统管理

创建完了之后,我们用mkswap命令格式化我们的新分区。 Linux磁盘与文件系统管理

然后我们都做好分区用blkid后看一下 Linux磁盘与文件系统管理接着配置挂载 Linux磁盘与文件系统管理开机重启,mount -a之后,df -h,可以看到挂载成功 Linux磁盘与文件系统管理

笔者,再配置swap分区的时候出了一点问题,我在创建系统的时候 建立了一个swap分区 后来 我又建立了一个swap分区 并且配置fstab文件,配置没有显示我挂载到指定目录,然后我用同样的方法 测试了一下 普通分区 配置fstab文件,成功了 ,开机启动看到了挂载在我指定的目录下,现在我把 原来配置的swap 分区去掉 比较前后两次的swap 总数,发现不一样 ,论证了 如果挂载两个swap分区 会合并在一起。得出结论是,最好只要一个swap。

Linux磁盘与文件系统管理


操作练习

1、创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项;

        (1) 创建20G分区;
        (2) 格式化:
            mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE
        (3) 编辑/etc/fstab文件
        LABEL='TEST'    /testing    ext4    defaults,acl    0 0

2、创建一个5G的文件系统,卷标HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3;

3、写一个脚本,完成如下功能: (1) 列出当前系统识别到的所有磁盘设备; (2) 如磁盘数量为1,则显示其空间使用信息;否则,则显示最后一个磁盘上的空间使用信息;

if [ $disks -eq 1 ]; then 
    fdisk -l /dev/[hs]da
else 
    fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-]" | tail -1 | cut -d' ' -f2)
fi