磁盘存储

Posted -one

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘存储相关的知识,希望对你有一定的参考价值。

磁盘系统:

一、磁盘分区

1、MRB:最大支持存储2T,单文件最大支持不超过4G  

     一块硬盘最多支持4个主分区,亦或者3个主分区+1扩展(n个逻辑分区)   

      

2、GPT :支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)

                   128位UUID表示磁盘和分区GPT分区表自动备份头尾并有CRC校验位

       UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系                          统可以启动

二、分区管理

1、管理工具  fdisk:专业管理GPT分区的工具,也可以用于管理MBR

        

fdisk -l [-u] [device...] 查看分区
fdisk [device...] 管理MBR分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出

#查看内核是否已经识别新的分区
cat /proc/partations

#新增分区
partx -a /dev/DEVICE      #同步分区表
kpartx -a /dev/DEVICE -f: force

#删除分区
partx -d --nr M-N /dev/DEVICE
#范例:非交互式创建分区
echo -e n
p


+2G
w
 | fdisk /dev/sdc

 

         gdisk:专业管理MBR分区的工具

         parted:分区实时管理工具,保存即生效!谨慎使用!!

1 #格式:
2 parted [选项]... [设备 [命令 [参数]...]...]
3 #示例
4 parted /dev/sdb mklabel gpt|msdos
5 parted /dev/sdb print
6 parted /dev/sdb mkpart primary 1 200 (默认M)
7 parted /dev/sdb rm 1
8 parted –l 列出所有硬盘分区信息
  

 

二:文件系统

Linux常用的文件系统:ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件

              (16TB)、最大1EB的文件系统,以及速度的提升 

                                                     EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本

                   Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB

                理论上支持无限数量的子目录

                Ext4文件系统使用64位空间记录块数量和 inode数量

                Ext4的多块分配器支持一次调用分配多个数据块

                修复速度更快

             xfs:SGI,支持最大8EB的文件系统

               根据所记录的日志在很短的时间内迅速恢复磁盘文件内容

用优化算法,日志记录对整体文件操作影响非常小

是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB

能以接近裸设备I/O的性能存储数据

          swap:交换空间

          iso9660:光盘

          brtfs(Oracle):家庭用

RAW:未经处理和格式化的产生的文件系统,存储格式一般为二进制的格式

windows常用文件系统:FAT32     :最多只能支持16TB的文件系统和4GB的文件

           NTFS      :最多只能支持16EB的文件系统和16EB的文件

           exFAT     :移动存储设备的格式常见的U盘

1、文件系统管理

  创建文件系统工具

#mkfs命令
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L LABEL 设定卷标
mke2fs:ext系列文件系统专用管理工具
常用选项
-t {ext2|ext3|ext4} 指定文件系统类型
-b {1024|2048|4096} 指定块 block 大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性

#blkid 可以查看块设备属性信息
blkid [OPTION]... [DEVICE]
常用选项:
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL(卷标)
e2label DEVICE [LABEL]

findfs :查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid

tune2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, –O ^has_journal
-o 调整文件系统的默认挂载选项,–o ^acl
-U UUID 修改UUID号
dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
-h:查看超级块信息,不显示分组信息
xfs_info:显示示挂载或已挂载的 xfs 文件系统信息
xfs_info mountpoint|devname(挂载点)

 

2、文件系统检查和修复

  文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”

        注意:一定不要在挂载状态下执行下面命令修复
  fsck: File System Check

  

fsck.FS_TYPE
fsck -t FS_TYPE

注意:FS_TYPE 一定要与分区上已经文件类型相同
常用选项:
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
常用选项:
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

 

3、文件挂载

  挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

  卸载:为解除此关联关系的过程
  fsck.FS_TYPE
  fsck -t FS_TYPE

#格式:
mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
device:指明要挂载的设备
设备文件:例如:/dev/sda5
卷标:-L LABEL, 例如 -L MYDATA
UUID: -U UUID:例如 -U 0c50523c-43f1-45e7-85c0-a126711d406e
伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在,建议使用空目录
mount常用命令选项
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L LABEL 以卷标指定挂载设备
-U UUID 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
    async 异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中
    sync 同步模式,内存更改时,同时写磁盘
    atime/noatime 包含目录和文件
    diratime/nodiratime 目录的访问时间戳
    auto/noauto 是否支持自动挂载,是否支持-a选项
    exec/noexec 是否支持将文件系统上运行应用程序
    dev/nodev 是否支持在此文件系统上使用设备文件
    suid/nosuid 是否支持suid和sgid权限
    remount 重新挂载
    ro 只读 rw 读写
    user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
    acl 启用此文件系统上的acl功能
    loop 使用loop设备
    _netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统
    defaults 相当于rw, suid, dev, exec, auto, nouser, async
挂载规则:
一个挂载点,同一时间只能挂载一个设备
一个挂载点,同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录

永久挂载实现:
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载

  /etc/fstab格式 帮助:man 5 fstab
  每行定义一个要挂载的文件系统,,其中包括共 6 项
  1. 要挂载的设备或伪文件系统
  设备文件*可以选择文件系统的卷名或者唯一UUID
  LABEL:LABEL=""
  UUID:UUID=""
  伪文件系统名称:proc, sysfs
  2. 挂载点:必须是事先存在的目录
  3. 文件系统类型:ext4,xfs,iso9660,nfs,none
  4. 挂载选项:defaults ,acl,bind
  5. 转储频率:0:不做备份 1:每天转储 2:每隔一天转储
  6. fsck检查的文件系统的顺序:允许的数字是0 1 2
  0:不自检 ,1:首先自检;一般只有rootfs才用 2:非rootfs使用

添加了新的挂载项,必须执行下面的命令生效

mount -a

注意:在挂在的情况下修改了fstab文件后如需生效需要重新挂载对应的磁盘

mount -o remount /挂载设备、挂载的系统文件

 

 


  把设备关联挂载点:mount Point
  挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空
  进程正在使用中的设备无法被卸载

4、 卸载文件系统 umount

  卸载时:可使用设备,也可以使用挂载点

  umount 设备名|挂载点

5、挂载信息查看

  

#通过查看/etc/mtab文件显示当前已挂载的所有设备
mount
#查看内核追踪到的已挂载的所有设备
cat /proc/mounts
#查看挂载点情况
findmnt MOUNT_POINT|device
#看出正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
#终止所有正在访问文件系统的进程,强制剔除登录进程的账号
fuser -km MOUNT_POINT

 

 三:SWAP交换分区扩展、删除

  swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据

时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过

多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露

注意:为优化性能,可以将swap 分布存放,或高性能磁盘存放

  交换分区扩展实现的过程:

  1、创建交换分区或者文件

  2、使用mkswap写入特殊签名

  3、在/etc/fstab文件中写入自己挂载条目

  4、使用swapon -a激活交换空间

启用swap分区
swapon [OPTION]... [DEVICE]
选项:
-a:激活所有的交换分区
-p PRIORITY:指定优先级,也可在/etc/fstab 在第4列指定:pri=value
[root@centos8 ~]#echo -e n
p


+2G
t
82
w
 | fdisk /dev/sdc
[root@centos8 ~]#mkswap /dev/sdc1
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f
[root@centos8 ~]#blkid /dev/sdc1
/dev/sdc1: UUID="d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f" TYPE="swap"
PARTUUID="b094d43d-01
[root@centos8 ~]#vim /etc/fstab
UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap swap defaults 0 0
[root@centos8 ~]#swapon -a
[root@centos8 ~]#free -h
total used free shared buff/cache available
Mem: 3.7Gi 264Mi 3.2Gi 9.0Mi 261Mi 3.2Gi
Swap: 4.0Gi 0B 4.0Gi
[root@centos8 ~]#cat /proc/swaps
Filename Type Size Used Priority
/dev/sda5 partition 2097148 0 -2
/dev/sdc1 partition 2097148 0 -3

#禁用swap分区
swapoff  -a  
swapon -a  启用wap分区

SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越高
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)


swap的使用策略
/proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间
范例:
[root@centos8 ~]# cat /proc/sys/vm/swappiness
说明:内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。简单地说这个参数定义了系统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性

 

四、逻辑卷

  1、实现过程

    将设备指定为物理卷

    用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的

    在物理卷上创建的逻辑卷, 是由物理区域(PE)组成

    可以在逻辑卷上创建文件系统并挂载

 

#逻辑卷实现过程
第一个逻辑卷对应设备名:/dev/dm-#
dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
软链接:
/dev/mapper/VG_NAME-LV_NAME
/dev/VG_NAME/LV_NAME
范例
/dev/mapper/vol0-root
/dev/vol0/root
逻辑卷的管理:
#1、创建pv
    pvs:简要pv信息显示
    pvdisplay:详细显示pv信息显示
    创建pv
    pvcreate /dev/设备
    删除pv
    pvmover /dev/设备

#2、创建vg
    vgs:简要vg信息显示
    vgdisplay:详细显示vg信息显示
    创建卷组
    vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath
    [PhysicalDevicePath...]
    管理卷组
    vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
    vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
    删除卷组
    先做pvmove
    再做vgremove

#3、创建lv
     lvs:简要显示lv信息
    Lvdisplay详细显示lv信息
    创建逻辑卷
    lvcreate -L #[mMgGtT] -n NAME VolumeGroup
    lvcreate -l 60%VG -n mylv testvg
    lvcreate -l 100%FREE -n yourlv testvg
    删除逻辑卷
    lvremove /dev/VG_NAME/LV_NAME
    文件系统大小设置
    fsadm [options] resize device [new_size[BKMGTEP]]
    resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
    xfs_growfs /mountpoint
    #创建物理卷
    pvcreate /dev/sda3
    #为卷组分配物理卷
    vgcreate vg0 /dev/sda3
    #从卷组创建逻辑卷
l    vcreate -L 256M -n data vg0
    #mkfs.xfs /dev/vg0/data
    #挂载
    mount /dev/vg0/data /mnt/data#
4扩展逻辑卷
    lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
    #针对ext
    resize2fs /dev/VG_NAME/LV_NAME
    #针对xfs
    xfs_growfs MOUNTPOINT
    lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
 缩减逻辑卷
    umount /dev/VG_NAME/LV_NAME
    e2fsck -f /dev/VG_NAME/LV_NAME
    resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
    lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
    mount
跨主机迁移卷组
源计算机上
1 在旧系统中,umount所有卷组上的逻辑卷
2 禁用卷组
vgchange –a n vg0
lvdisplay
3 导出卷组
vgexport vg0
pvscan
vgdisplay
4拆下旧硬盘在目标计算机上,并导入卷组:
vgimport vg0
5 启用
vgchange –ay vg0
6 mount 所有卷组上的逻辑卷

实现逻辑卷快照
逻辑卷快照工作原理
在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
#为现有逻辑卷创建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
#挂载快照
mkdir -p /mnt/snap
mount -o ro /dev/vg0/data-snapshot /mnt/snap
#恢复快照
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot
#删除快照
umount /mnt/databackup
lvremove /dev/vg0/databackup

 

  

以上是关于磁盘存储的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 是不是支持表(片段)的透明压缩?

sql 这些代码片段将演示如何逐步使用PolyBase。你应该有一个blob存储和存储秘密方便

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

df 报告磁盘使用情况,但在共享内存 /dev/shm 中没有文件

C程序存储结构