从零开始缓慢深入Linux - 基础指令篇(5)

本文详细介绍了Linux的磁盘管理,包括MBR和GPT两种分区方案的选择,重点讲解了fdisk、gdisk等管理指令的使用。此外,还探讨了文件系统的概念及常用命令。文章还深入讨论了LVM管理方案,展示了逻辑卷管理的灵活性,并给出了一例LVM扩容故障的解决方法。最后,提到了Swap分区的作用及创建方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux文件系统和磁盘管理

磁盘管理方案

目前主要有两种磁盘管理的方案

  • MBR管理方案:

    主引导记录(Master Boot Record , MBR)是指一个存储设备的开头 512 字节。它包含操作系统的引导器和存储设备的分区表。在MBR解决方案中由于分区表的大小限制导致只能有四个主分区或者三个主分区加一个扩展分区 (以及在扩展分区中的任意数量的逻辑分区)。如果你有三个主分区加一个扩展分区以及除此之外的空闲空间,在空闲空间之上你无法创立分区,传统的linux磁盘管理方案里都是以MBR为主。

  • GPT管理方案:

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准,是新一代的分区表格式。它是统一可扩展固件接口标准的一部分,它使用全局唯一标识来标识设备。GPT为每个分区提供了一个唯一硬盘 GUID 和一个唯一分区 GUID - 一个好的不依赖文件系统的引用分区和硬盘的方式。他可以任意分区数,取决于给分区表分配的空间,不需要扩展和逻辑分区。GPT ,默认包含了定义128个分区的空间。当用户想要更多分区时,他可以给分区表分配更多空间 (目前只有 gdisk 支持这一特性)。

  • 选择管理方式注意事项:

    如果使用GRUB legacy作为bootloader,必须使用MBR。

    如果使用 UEFI 而不是BIOS,并且双启动中包含 Windows 64位版,必须使用GPT。

    非常老的机器需要使用 MBR,因为 BIOS 可能不支持 GPT。

磁盘管理的指令

  • fdisk:用于显示硬盘使用情况、执行分区操作等,适用于MBR管理方案

    常用指令:
    a toggle a bootable flag
    b edit bsd disklabel
    c toggle the dos compatibility flag
    d delete a partition # 删除一个分区
    l list known partition types
    m print this menu
    n add a new partition # 新增一个分区
    o create a new empty DOS partition table
    p print the partition table # 在屏幕上显示分区信息
    q quit without saving changes # 不将变更后信息保存下来
    s create a new empty Sun disklabel
    t change a partition's system id
    u change display/entry units
    v verify the partition table
    w write table to disk and exit # 将信息保存至分区表中
    x extra functionality (experts only)
    
    注意:创建逻辑分区前必须创建扩展分区,且扩展分区不能直接投入使用。
    
  • gdisk:适用于GPT管理方案

    常用指令:
    b	back up GPT data to a file
    c	change a partition's name # 修改分区表名称
    d	delete a partition # 删除分区
    i	show detailed information on a partition
    l	list known partition types
    n	add a new partition # 添加分区
    o	create a new empty GUID partition table (GPT)
    p	print the partition table # 显示当前分区情况
    q	quit without saving changes #不保存退出
    r	recovery and transformation options (experts only)
    s	sort partitions
    t	change a partition's type code 
    v	verify disk
    w	write table to disk and exit # 保存退出
    x	extra functionality (experts only)
    ?	print this menu
    
    

文件系统

操作系统中负责管理和存储文件信息的部分称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。

核心概念:

  • 超级块superblock:超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)
  • inode:inode包括除了名字外的一个文件的所有信息,名字与inode数目一起存在目录块中,目录条目包括文件名和文件的inode数目。inode包括几个数据块的数目,用于存储文件的数据。inode中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。
  • 数据块data block:实际存放数据的位置。
  • 目录块directory block,和间接块indirection block

常用指令:du,df,mkfs,fsck,mount,umount,blkid

涉及文件:/etc/fstab 记录开机自动挂载信息

du和df用法:

[root@rhel6 ~]# df -h # 查看磁盘空间情况
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/vg_rhel6-LogVol01   17G  3.0G   13G  19% /
tmpfs                          499M   72K  499M   1% /dev/shm
/dev/vda1                      477M   58M  390M  13% /boot
/dev/mapper/vg_rhel6-LogVol00  380M  2.3M  354M   1% /home

[root@servera ipython-0.13.1]# df -i # 查看inode使用情况
Filesystem                 Inodes  IUsed     IFree IUse% Mounted on
/dev/vda1                10484096  41152  10442944    1% /
devtmpfs                    58324    293     58031    1% /dev
tmpfs                       62628      1     62627    1% /dev/shm
tmpfs                       62628    319     62309    1% /run
tmpfs                       62628     13     62615    1% /sys/fs/cgroup
172.25.254.250:/content 117569536 149932 117419604    1% /mnt

[root@rhel6 ~]# du -sh /var/ # 统计文件或目录实际占用空间情况,-s 代表求和
138M

mkfs用法:

[root@rhel7 ~]# mkfs.xfs /dev/vdb1 # 用以对磁盘或分区创建文件系统(格式化)
meta-data=/dev/vdb1              isize=256    agcount=4, agsize=655296 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=2621184, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

mount用法:

mount [-fnrsvw] [-t vfstype] [-o options] device dir # 提供给磁盘设备文件一个入口的目录
举例:
[root@rhel7 ~]# mount -t xfs /dev/vdb1 /test  # 标准用法
[root@rhel7 ~]# mount -o ro,remount /dev/vdb1 /test # 以ro的方式重新挂载,默认rw
[root@rhel7 ~]# mount -o loop rhel-server-6.5-x86_64-dvd.iso /test # 以本地回环设备挂接特殊文件
[root@rhel7 ~]# mount # 用来查看当前挂接情况
/dev/mapper/vg_rhel7-LogVol01 on / type xfs (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/vda1 on /boot type ext4 (rw)
/dev/mapper/vg_rhel6-LogVol00 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

umount用法:

   umount [-dflnrv] {dir|device}... # 取消目录和设备文件的对应关系
[root@rhel7 ~]# umount /test 

blkid用法:

blkid -p [-O offset] [-o format] [-S size] [-s tag] [-n list] [-u list] device ... # 用以显示文件系统信息
[root@servera ipython-0.13.1]# blkid /dev/vda1
/dev/vda1: UUID="e2a34bd8-5f19-4dae-ad8b-e98560bffbac" TYPE="xfs" 

/etc/fstab文件管理方法:

写在该文件中的挂接信息会在服务器开启时自动完成。

[root@foundation0 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sat Jul 23 20:30:13 2016
#
# 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
#
UUID=6039c222-d258-419f-b309-25b48a9b47c7 /                       xfs     defaults       0       0 
# 设备									挂载点					文件系统类型  选项   	是否备份 是否检测
UUID=c6feca1f-487b-4740-be24-3d8414fa1483 swap                    swap    defaults        0       0
/content/rhel7.2/x86_64/isos/rhel-server-7.2-x86_64-dvd.iso   /content/rhel7.2/x86_64/dvd   iso9660   loop,ro   0 0
/content/rhel7.1/x86_64/isos/rhel-server-7.1-x86_64-dvd.iso   /content/rhel7.1/x86_64/dvd   iso9660   loop,ro   0 0
/content/rhel6.5/x86_64/isos/rhel-server-6.5-x86_64-dvd.iso   /content/rhel6.5/x86_64/dvd   iso9660   loop,ro   0 0
/content/rhel7.0/x86_64/isos/rhel-server-7.0-x86_64-dvd.iso   /content/rhel7.0/x86_64/dvd   iso9660   loop,ro   0 0

lvm管理方案

逻辑卷管理器则是在磁盘分区与文件系统之间添加的逻辑层,提供一个抽象的卷组,使得管理者可以忽略底层磁盘布局,从而实现对分区的灵活动态调整,目前建议启用 LVM(Logical Volume Manager) 机制。

关键词:

  • 物理卷(PV,Physical Volume ):整个硬盘设备或使用 fdisk 命令建立的硬盘分区。
  • 卷组(VG,Volume Group ) :由一个或多个物理卷(PV)组成的整体
  • 逻辑卷(LV,Logical Volume ):;从卷组(VG)出切割出的空间来用于创建文件系统,大小由 PE 的个数决定。

常用指令

指令含义
pvcreate创建物理卷
pvremove删除物理卷
vgcreate创建卷组
vgextend扩展卷组
vgreduce缩小卷组
vgremove删除卷组
lvcreate创建逻辑卷
lvextend扩展逻辑卷
lvreduce缩小逻辑卷
lvremove删除逻辑卷
pvmove迁移pv的数据
pvs | pvdisplay查看pv状态
vgs | vgdisplay查看vg状态
lvs | lvsdisplay查看lv状态

举例:

[root@iscsi1-f15 ~]# fdisk /dev/vdb --->vdb[123] 100M
[root@iscsi1-f15 ~]# pvcreate /dev/vdb[123]
[root@iscsi1-f15 ~]# vgcreate myvg /dev/vdb[123]
[root@iscsi1-f15 ~]# lvcreate -L 20M myvg -n lv1-linear
[root@iscsi1-f15 ~]# lvcreate -L 60M myvg -n lv2-linear
[root@iscsi1-f15 ~]# mkfs.ext4 /dev/myvg/lv1-linear
[root@iscsi1-f15 ~]# mkfs.ext4 /dev/myvg/lv2-linear
[root@iscsi1-f15 ~]# mount /dev/myvg/lv1-linear /opt/lv1
[root@iscsi1-f15 ~]# mount /dev/myvg/lv2-linear /opt/lv2
[root@iscsi1-f15 ~]# lvextend -L +60M /dev/myvg/lv1-linear
[root@iscsi1-f15 ~]# lvextend -L +30M /dev/myvg/lv2-linear
[root@iscsi1-f15 ~]# resize2fs /dev/myvg/lv1-linear
[root@iscsi1-f15 ~]# resize2fs /dev/myvg/lv2-linear

[root@iscsi1-f15 ~]# pvcreate /dev/vdb[45]
[root@iscsi1-f15 ~]# vgextend myvg /dev/vdb[45]
[root@iscsi1-f15 ~]# pvmove /dev/vdb1 /dev/vdb4
[root@iscsi1-f15 ~]# pvmove /dev/vdb2 /dev/vdb4
[root@iscsi1-f15 ~]# pvmove /dev/vdb4 /dev/vdb5
[root@iscsi1-f15 ~]# dmsetup table|grep myvg

lvm故障案例

故障描述:

在云上需要扩展磁盘,由于云系统支持原盘扩容,原来1T的磁盘直接扩展成2T。原环境中整盘做成pv,执行fdisk的时候识别到了2T,但是pv依旧为1T,如何扩容lvm。

解决方法

pvresize $PVNAME # 让pv重新识别磁盘

LVM实战案例:

使用LVM 的Snapshot功能实现备份:

构建步骤:

# 根据当前的LVM构建Snapshot
lvcreate -L 1G -n lv-data-backup -s /dev/mapper/vgtest-lvtest

# 将snapshot后的设备挂载起来
mount -o nouuid /dev/vgtest/lv-data-backup /lvbackup/

# 针对该目录进行压缩备份操作
tar -czf /tmp/test.tgz /lvbackup

Swap使用

作用:

Swap分区在系统的物理内存不足的时候,把硬盘中的一部分空间释放出来,以供当前运行的程序模拟成内存去使用,通常Swap空间的大小应是物理内存的2倍左右,但根据不同的应用,需采取不同的配置方案。

每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址。

虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址。

如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。

构建swap的方法:

# 将分区构建为swap:mkswap [options] device [size]
# 启用swap:swapon [-d] [-f] [-p priority] [-v] specialfile...
# 停用swap:swapoff [-v] specialfile...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值