【Linux命令行与Shell脚本编程】第八章 管理文件系统

Linux命令行与Shell脚本编程

第八章 管理文件系统



八,管理文件系统

·文件系统基础·日志文件系统与卷管理文件系统·文件系统管理·逻辑卷布局·使用Linux逻辑卷管理器

8.1,文件系统基础 (了解)

Linux支持多种文件系统。每种文件系统都在存储设备上实现了虚拟目录结构,只是特性略有不同.
8.1.1.文件系统演进
1,ext文件系统
扩展文件系统 最初引入的文件系统;
文件大小不得超过 2GB;
ext文件系统使用i节点(inode)跟踪存储在虚拟目录中文件的相关信息,
i节点系统 在 每个物理存储设备 中创建一个单独的表(称作i节点表)来保存文件信息。
使用虚拟目录处理物理存储设备并在其中 以固定大小的磁盘块 形式保存数据。
    文件名
    文件大小
    文件属主
    文件属组
    文件访问权限
    指向存有文件数据的每个块的指针
文件系统是通过 i节点号 而非文件名和路径来标识文件的
2.ext2文件系统
Linux出现后不久,ext文件系统就升级到了第二代扩展文件系统,称作ext2。
    在i节点表中加入了文件的创建时间、修改时间以及最后一次访问时间。
    允许的最大文件大小增至 2TB,后期又增加到 32TB
    保存文件时按组分配磁盘块。
8.1.2.日志文件系统
日志文件系统为Linux系统增加了一层安全性。

之前先将数据直接写入存储设备再更新i节点表
日志文件系统 先将文件变更写入临时文件(称作日志)。在数据被成功写到存储设备和i节点表之后,再删除对应的日志条目。

日志方式:

方法描述
数据模式i节点和文件数据都会被写入日志;数据丢失风险低,但性能差
有序模式只有i节点数据会被写入日志,直到文件数据被成功写入后才会将其删除;在性能和安全性之间取得了良好的折中
回写模式只有i节点数据会被写入日志,但不控制文件数据何时写入;数据丢失风险高,但仍好于不用日志.
数据模式日志方法是目前为止 最安全,但速度最慢 的数据保护方法,
写入存储设备的数据都写两次:一次写入日志,一次写入实际的存储设备。性能低下。
1,ext3文件系统
ext3文件系统是ext2的后续版本,支持最大 2TB的文件,能够管理 32TB大小的分区。
默认 ext3采用有序模式的日志方法,不过也可以通过命令行选项改用其他模式。
ext3文件系统无法恢复误删的文件,也没有提供数据压缩功能
2,ext4文件系统
ext4文件系统最大支持 16TiB的文件,能够管理 1EiB大小的分区。
默认 ext4采用有序模式的日志方法,可以通过命令行选项改用其他模式!!。
支持加密,压缩,单目录下不限数量的子目录。 ext2和ext3可以作为ext4 挂载,以提高性能表现。
3,JFS文件系统

有序模式

4,ReiserFS文件系统
Linux 不再支持
5.XFS文件系统
回写模式
8.1.3,卷文件管理系统
写时复制COW 技术。COW通过快照兼顾了安全性和性能。
在修改数据时,使用的是克隆或可写快照。修改过的数据不会直接覆盖当前数据,放入文件系统中另一个位置。仅在数据修改完成之后才会改动旧数据.
磁盘 创建的存储池 提供了生成虚拟磁盘(卷)的能力。通过存储池,可以根据需要增加卷,在提供灵活性的同时大大减少停机时间。
提供了COW、快照和卷管理特性的文件系统日渐流行。
1,ZFS文件系统
数据完整性验证和自动修复功能,支持最大 16EB的文件,能够管理 256万亿ZB的存储空间。
ZFS最大的弱项是没有采用GNU通用公共许可证,因此无法被纳入 Linux内核。但好在大多数Linux发行版提供了相应的安装方法。
2,Btrfs文件系统
B-tree文件系统.稳定性、易用性以及能够动态调整已挂载文件系统的大小
2017 redhat 弃用
3,Stratis文件系统
Stratis维护的存储池由一个或多个XFS文件系统组成,同时还提供 COW功能。

8.2 文件系统命令

进行文件系统操作,创建新的文件系统或修改已有的文件系统。
8.2.1,创建分区
在存储设备上创建可容纳文件系统的分区。分区范围可以是整个硬盘,也可以是部分硬盘以包含虚拟目录的一部分。
用于组织和管理分区的工具:
    fdisk
    gdisk
    GNU parted
    其他

Linux采用  一种标准格式来 为硬盘分配设备名称:
    SATA驱动器和SCSI驱动器:
        设备命名格式为/dev/sd[x], x 根据驱动器的检测顺序决定(第一个检测到的驱动器是a,第二个是b,以此类推)。
    SSD NVMe驱动器:
        设备命名格式为/dev/nvmeNn#, 数字N 根据驱动器的检测顺序决定(从0起始)。#是分配给该驱动器的名称空间编号(从1起始)。
    IDE驱动器:
        设备命名格式为/dev/hd[x], 字母x 根据驱动器的检测顺序决定。
1,fdisk 工具
可以在任何存储设备上创建和管理分区。 只能处理最大 2TB的硬盘。
首次分区,fdisk 会警告 该设备没有分区表。
fdisk是 一个交互式程序,允许 输入命令来逐步完成硬盘分区操作。
启动fdisk,需要指定 待分区的存储设备的名称,和超级用户权限
    
    # fdisk /dev/sda
        Welcome to fdisk (util-linux 2.32.1).
        Changes will remain in memory only, until you decide to write them.
        Be careful before using the write command.
        Command (m for help):
命令描述
a设置活动分区标志
b编辑BSD Unix系统使用的标签
c设置DOS兼容标志
d删除分区
g创建新的空GTP分区表
G创建IRIX(SGI)分区表
l显示可用的分区类型
m显示命令菜单
n添加一个新分区
o创建新的空DOS分区表
p显示当前分区表
q退出,不保存更改
s为SunUnix系统创建一个新标签
t修改分区的系统ID
u修改显示单元
v验证分区表
w将分区表写入磁盘并退出
x附加功能(仅供专家使用)
p命 令 显示指定存储设备当前的分区表:
    Command (m for help): p
    Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x8a136eb4
    
    Device     Boot   Start      End  Sectors Size Id Type
    /dev/sda1  *       2048  2099199  2097152   1G 83 Linux
    /dev/sda2       2099200 41943039 39843840  19G 8e Linux LVM
    
    Command (m for help):

fdisk命令 不允许调整现有分区的大小。只能删除现有分区,然后重新创建。


对分区做了改动,务必使用w命令将改动写入硬盘后再退出。
不想保存修改内容,则直接使用q命令退出:
    Command (m for help): q
新建一个分区
    $ sudo fdisk /dev/sdb
    Command (m for help): n
    Partition type
       p   primary (0 primary, 0 extended, 4 free)
       e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1): 1
    First sector (2048-4194303, default 2048):
    Last sector, +sectors or +size{K,M,G,T,P} (2048-4194303,default 4194303):
    
    Created a new partition 1 of type 'Linux' and of size 2 GiB.
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
2.gdisk 工具
存储设备要采用 GUID分区表,要用 gdisk:
    $ sudo gdisk /dev/sda
    
gdisk 会识别存储设备所采用的分区类型。如果当前未使用GPT方法,则 gdisk会提供相应的选项,将其转换为GPT。
转换存储设备分区类型时,所选择的类型必须与系统固件(BIOS或UEFI)兼容,否则无法引导设备。
命令描述
b将GTP数据备份至文件
c修改分区名称
d删除分区
i显示分区的详细信息
l显示可用的分区类型
n添加一个新分区
o创建一个新的空GUID分区表(GPT)
p显示当前分区表
q退出,不保存更改
r恢复和转换选项(仅供专家使用)
s排序分区
t修改分区的类型代码
v验证磁盘
w将分区表写入磁盘并退出
x附加功能(仅供专家使用)
?显示命令菜单
3.GNU parted 工具
提供了另一种命令行界面来处理分区。
    $ sudo parted
    GNU Parted 3.2
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print
    Model: ATA VBOX HARDDISK (scsi)
    Disk /dev/sda: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags:
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  1075MB  1074MB  primary  ext4         boot
     2      1075MB  21.5GB  20.4GB  primary               lvm
    
    (parted) quit
    $

允许调整现有的分区大小,所以可以很容易地收缩或扩大磁盘分区。!!!
8.2.2,创建文件系统
将数据存储到分区之前,必须使用某种文件系统对其进行格式化,以便Linux能够使用分区。
每种文件系统类型都有自己专门的格式化工具。
工具用途
mkefs创建ext文件系统
mke2fs创建ext2文件系统
mkfs.ext3创建ext3文件系统
mkfs.ext4创建ext4文件系统
mkreiserfs创建ReiserFS文件系统
jfs_mkfs创建JFS文件系统
mkfs.xfs创建XFS文件系统
mkfs.zfs创建ZFS文件系统
mkfs.btrfs创建Btrfs文件系统
某个工具是否可用,可以使用type命令
    $ type mkfs.ext4
        mkfs.ext4 is /usr/sbin/mkfs.ext4
    $ type mkfs.btrfs
        -bash: type: mkfs.btrfs: not found


工具都允许通过不带选项的简单形式来创建默认的文件系统,超级用户权限
    采用ext4文件系统类型
        $ sudo mkfs.ext4 /dev/sdb1
        mke2fs 1.44.6 (5-Mar-2019)
        Creating filesystem with 524032 4k blocks and 131072 inodes
        [...]
        Creating journal (8192 blocks): done
        Writing superblocks and filesystem accounting information: done

每个文件系统命令都有大量命令行选项,允许 定制如何在分区上创建文件系统。使用man命令显示相应命令的手册页。
    
为分区创建好文件系统之后,下一步 将其挂载到虚拟目录中的某个挂载点,以便在新分区中存储数据。挂载点可以是虚拟目录中的任何位置。
    $ mkdir /home/christine/part
    $ sudo mount -t ext4 /dev/sdb1 /home/christine/part
    $ lsblk -f /dev/sdb
    NAME   FSTYPE LABEL UUID      MOUNTPOINT
    sdb
    ⌙sdb1 ext4         a8d1d[...]  /home/christine/part
lsblk -f命令可以显示新近格式化过并挂载的分区。

!!!! 这样 只能实现临时挂载,重启系统后就失效了。要强制Linux在启动时自动挂载文件系统,将其添加到/etc/fstab文件中。
8.2.3 文件系统的检查与修复
fsck命令可以检查和修复大部分Linux文件系统类型:
    fsck options filesystem
    filesystem 设备名或其在虚拟目录中的挂载点.  对其使用fsck之前,必须先卸载设备;检查完成之后再重新挂载;

fsck 命令会 使用/etc/fstab文件自动决定系统中已挂载的存储设备的文件系统。
    如果存储设备尚未挂载,则需要用-t命令行选项指定文件系统类型。
选项描述
-a检测到错误时自动修复文件系统 同-y;重复选项是 为多个命令实现 通用前端带来的部分问题。
-A检查 /etc/fstab 文件中列出的所有文件系统
-N不进行检查,只显示要检查的内容
-r出现错误时进行提示
-R使用-A选项时跳过根文件系统
-t指定要检查的文件系统类型
-V在检查时产生详细輸出
-y检测到错误时自动修复文件系统 同-a

8.3,逻辑卷管理

向已有的文件系统增添额外的存储空间是一种痛苦的体验,只能在同一个物理硬盘的可用空间范围内调整分区大小。
    如果硬盘上没有地方了,就得找一个更大的硬盘,手动将已有的文件系统转移到新硬盘。
可以通过将另一块硬盘上的分区加入已有的文件系统来动态地添加存储空间。

Linux逻辑卷管理器(logical volume manager,LVM)可以 在无须重建整个文件系统的情况下,轻松地管理磁盘空间。
8.3.1,LVM布局
LVM允许将 多个分区组合在一起,作为单个分区(逻辑卷)进行 格式化、上挂载、存储数据 等。可以继续向逻辑卷添加分区。
1,物理卷(physical volume,PV)
物理卷 通过 LVM 的  pvcreate 命令创建。
pvcreate命令指定了一个未使用的磁盘分区(或整个驱动器)由LVM使用。这个过程中,LVM结构、卷标和元数据都会被添加到该分区。
2,卷组(volume group,VG)
卷组 通过 LVM 的 vgcreate 命令创建。
vgcreate命令会将 PV加入存储池,后者随后用于构建各种逻辑卷。可以存在多个卷组。
多个物理卷(PV)集中在一起会形成卷组(VG),由此形成了一个存储池,从中为逻辑卷(LV)分配存储空间。

当使用 vgcreate将一个或多个PV加入VG时,也会同时添加卷组的元数据。

被指定为 物理卷PV的分区只能属于单个 卷组VG。但被指定为 物理卷PV的其他分区可以属于其他 卷组VG。
3,逻辑卷(logical volume,LV)
逻辑卷 通过LVM的 lvcreate命令创建。逻辑卷创建过程的最终产物。
逻辑卷LV由 卷组VG的 存储空间块(PE physical extents) 组成。可以使用 文件系统格式化 逻辑卷LV,然后挂载,像普通的磁盘分区那样使用。

尽管可以有多个 卷组VG,但 逻辑卷LV只能从一个指定的 卷组VG中创建。
    多个 逻辑卷LV可以共享单个 卷组VG。(逻辑卷LV 不能跨越 卷组 VG创建)可以使用相应的 LVM命令调整(增加或减少)逻辑卷LV的容量。该特性赋予了数据存储管理极大的灵活性。
8.3.2.Linux 的 LVM
Lvm 是用于创建和管理LV的交互式实用工具。尚未安装,可以通过 lvm2软件包 安装。LVM工具直接在 CLI 中使用。(2是版本号)

首次设置逻辑卷的步骤:
    (1) 创建物理卷PV。
    (2) 创建卷组VG。
    (3) 创建逻辑卷LV。
    (4) 格式化逻辑卷。
    (5) 挂载逻辑卷。
1,创建物理卷PV
指定作为PV的存储设备之前,先确保已经分区且未使用。 
使用pvcreate命令指定要作为PV的分区.超级用户权限:
    $ lsblk
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb           8:16   0    2G  0 disk
    ⌙sdb1         8:17   0    2G  0 part
    sdc           8:32   0    1G  0 disk
    ⌙sdc1         8:33   0 1023M  0 part
    sdd           8:48   0    1G  0 disk
    ⌙sdd1         8:49   0 1023M  0 part
    sde           8:64   0    1G  0 disk
    ⌙sde1         8:65   0 1023M  0 part
    sr0           11:0   1 1024M  0 rom

    $ sudo pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1
    [sudo] password for christine:
      Physical volume "/dev/sdc1" successfully created.
      Physical volume "/dev/sdd1" successfully created.
      Physical volume "/dev/sde1" successfully created.
    $
2.创建卷组VG
只要是PV,就可以加入VG。创建VG vgcreate命令
由于许多发行版在安装期间为 虚拟目录结构的根(/)设置了LVM,可以使用 vgdisplay命令检查一下系统当前的VG:
    $ sudo vgdisplay
      --- Volume group ---
      VG Name               cl
      System ID
      Format                lvm2
使用vg00作为第一个VG的名称
    $ sudo vgcreate vg00 /dev/sdc1 /dev/sdd1
      Volume group "vg00" successfully created
3,创建逻辑卷LV
使用 lvcreate命令创建LV。LV的大小由 -L 选项设置,使用的空间取自指定的VG存储池:
    $ sudo lvcreate -L 1g -v vg00
    [sudo] password for christine:
      Archiving volume group "vg00" metadata (seqno 1).
      Creating logical volume lvol0
      Logical volume "lvol0" created.
完整的设备路径名是/dev/vg00/lvol0;

VG没有足够的存储空间来满足LV要求的大小,将无法创建LV。错误消息 insufficient free space error。

使用lvdisplay命令显示相关信息:
    $ sudo lvdisplay /dev/vg00/lvol0
    [sudo] password for christine:
      --- Logical volume ---
      LV Path                 /dev/vg00/lvol0
      LV Name                 lvol0
      VG Name                 vg00
      LV Size                 1.00 GiB
8.3.3,使用Linux Lvm
创建好LV,就可以将其视作普通分区。不同之处在于 可以根据需要,扩大或收缩 分区。前提必须将LV挂载到虚拟目录结构中.
1,格式化和挂在LV
创建文件系统,然后再挂载到虚拟目录结构中:
    $ sudo mkfs.ext4 /dev/vg00/lvol0
    Writing inode tables: done
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    $ mkdir my_LV
    $ sudo mount -t ext4 /dev/vg00/lvol0 my_LV
    $ ls my_LV
    lost+found
想在系统重启时自动挂载新的LV,需要在/etc/fstab文件中添加一条记录。
2.扩大或收缩VG和LV
命令描述
Vgextend将PV加入VG
Vgreduce从VG中删除PV
lvextend扩大LV的容量
lvreduce收缩LV的容量

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值