linux入门之磁盘管理文件系统

author author     2022-08-01     159

关键词:

Linux入门之磁盘管理(2)文件系统

linux分区构成完成之后,一般需要进行对其创建指定的文件系统,也就是我们常说的格式化,然后对其进行分区挂载,提供指定分区的访问点。不同的分区格式会在文件系统内部提供不同的对该分区的数据存储的格式分配,以及其内部模块会支持不同的分区的接口及方法调用,例如对一个文件的打开、读取、写入、关闭等功能,每个文件系统都会有各种不同的特点。

常见的系统文件系统:

linux

ext2ext3ext4xfs(SGI)btrfs(Oracle)reiserfsjfs(ATX)swap

windows

ntfsfat32

unix

FFS(fast)USF(unix)JFS2

注意:linux是识别fat32,只不过其类型显示为vfat格式

其它领域的文件系统:

网络文件系统:NFS, CIFS 

集群文件系统:GFS2OCFS2Oracle

分布式文件系统:cephmoosefsmogilefsglusterfsLustre

RAW:未经处理或者未经过格式化产生的文件系统


Linux中的文件系统划分:

按是否支持Journal(日志)功能分类:

日志性文件系统:ext3, ext4, xfs

非日志型文件系统:ext2, vfat

文件系统的组成部分:

内核中的模块:ext4xfs,  vfat

用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat

注意:这里说明了如果内核实现未提供相应的模块,就是能使用格式化工具去格式化对应格式分区,但内核模块不识别,当然工具是建立在内核的基础上的。

Linux虚拟文件系统:VFS

用途:为了支持不同类型格式文件系统下数据和系统内核处理的连接,中间出现了虚拟文件系统,对外提供了一个同一的接口规范来是各种文件系统来调用以此让系统管理


使用命令查看当前系统内核支持的文件系统:

/proc/filesystems  (映射内核支持的所有文件系统列表)

[[email protected] ~]# cat /proc/filesystems
nodevdrm
    ext4

解析:这里有两列,nodev表示没有设备在使用此系统模块,而为空表示有设备使用了此文件系统


使用命令创建文件系统(格式化分区):

通用文件系统工具

mkfs  命令

用法:mkfs.FS_TYPE  /dev/DEVICE :注意这里是对分区操作

FS_TYPE:   ext4

        xfs

        ftrfs

        vfat

  mkfs  -t  FS_TYPE  /dev/DEVICE:通过-t类型指定文件系统类型

-L  LABEL  :格式化时指定一个卷标,默认不指定为空


专用创建ext文件系统

mke2fs  命令 

mke2fs:专门用于ext系列系统,不支持其创建它文件系统

用法:

mke2fs  [option]  /dev/DEVICE
      -t  {ext2|ext3|ext4}     #格式化为指定格式文件系统,默认不指定为ext2
      -b  {1024|2048|4096}          #设置每一个块占多少个字节,一般默认为4096
      -L  ‘LABEL’              #格式化时指定卷标
      -j                    #格式化为ext3
      -i #                   #指定多少#字节创建一个inode,不能小于block大小
      -N #                   #为数据空间创建多少#个inode
      -m #     #为管理员预留多少块占用,单位为百分比,默认为5%
      -O FEATURE  #启用指定特性,多个特性中间用 , 隔开
      -O ^FEATURE  #禁用指定特性


命令使用实例:

#查看/dev/sdb磁盘是否已经进行了分区,这里显示进行事先创建好了分区
[[email protected] ~]# fdisk -l /dev/sdb | grep ‘^/dev.*‘
/dev/sdb1     1        2914      131129+        83  Linux
/dev/sdb2     2915      14566      524340        83  Linux
/dev/sdb3     14567      37869     1048635        83  Linux
/dev/sdb4     37870      466033    19267380       5 Extended
/dev/sdb5     37870      61172     1048634+       83  Linux
#下面进行格式化,因为产生信息过多,这里我们全部写入一个文件
[[email protected] ~]# mke2fs /dev/sdb1 &> mksdb1.log

#分析格式化产生的信息:
#这里显示默认为预留了6556个块,也就是总块数的5%
[[email protected] ~]# cat mksdb1.log | grep -o ‘.*blocks.*)‘
6556 blocks (5.00%)

#查看/dev/sdb1被分配了多少个inode,多少个存数据的块,多少个分配块的分组
[[email protected] ~]# cat mksdb1.log | grep -o ‘^[0-9].*(blocks|groups)$‘
32896 inodes, 131073 blocks
16 block groups

#查看/dev/sdb1分配了多少bytes来指定一个block
[[email protected] ~]# cat mksdb1.log | grep -o ‘^Blo.*e=[0-9]+‘
Block size=1024

#格式化设置指定分区卷标名
[[email protected] ~]# mke2fs -L ‘mydata‘ /dev/sdb1  |&  grep -o ‘label=.*‘
label=mydata


使用命令查看设备属性信息:

指向设备的另一种方法,一般常见有3中:

指定设备名、设备卷标名、设备UUID


blkid  命令

用法:

blkid  [option]...  /path/to/dev
        -U  UUID:#根据指定的UUID来查找对应的设备
        -L  LABEL:#根据指定的卷标名来查找对应的设备


e2label  命令

专用于ext系列文件系统

e2label  DEVICE  [LABEL]


findfs  命令

findfs  [option]  LABEL=<label>  #根据指定卷标名查找出对于分区
findfs  [option]  UUID=<uuid>   #根据指定UUID查找出对应分区


使用案例:

#查看fstab中设置的分区格式信息
[[email protected] ~]# cat /etc/fstab | grep ‘^[^#[:space:]]‘
UUID=d4216951-0028-4b26-824e-89a2f661d008  /   ext4 defaults        1 1
UUID=2f1d03b9-c82a-45be-af0f-8766eff3f9ac   /boot  ext4  defaults        1 2
UUID=47433c93-6d04-46e5-bed0-8fd189874278  /testdir ext4 defaults        1 2
UUID=3d3cb745-3fe1-4482-9814-fc1bf9f7f76e swap  swap defaults          0 0
tmpfs   /dev/shm          tmpfs   defaults        0 0
devpts   /dev/pts          devpts   gid=5,mode=620     0 0
sysfs   /sys                  sysfs   defaults        0 0
proc    /proc            proc    defaults       0 0
#现在我们要根据UUID来找出boot分区,可以借助文本处理工具
[[email protected] ~]# cat /etc/fstab | sed -n ‘s/^UUID=(.*)[[:space:]]/boot.*$/1/gp‘
2f1d03b9-c82a-45be-af0f-8766eff3f9ac
#然后使用命令调用来根据UUID找出对应分区
[[email protected] ~]# blkid -U `sed -n ‘s/^UUID=(.*)[[:space:]]/boot.*$/1/gp‘ /etc/fstab` 
/dev/sda1
#这里显示/dev/sda1,是正确的,上面我们通过/etc/fstab显示的是/boot分区的UUID
#当然不确定可以也可以使用blkid进行详细查看
[[email protected] ~]# blkid /dev/sda1
/dev/sda1: UUID="2f1d03b9-c82a-45be-af0f-8766eff3f9ac" TYPE="ext4" 
#显示了其UUID,并且文件系统为ext4
#使用e2label设备并查看卷标
[[email protected] ~]# e2label /dev/sdb1 mydata
[[email protected] ~]# e2label /dev/sdb1 
mydata
#同样使用findfs通过管道来查询/boot分区
[[email protected] ~]# grep -o ‘.*/boot‘ /etc/fstab | grep -o ‘=.*>[[:space:]]‘ | grep -o ‘[^=[:space:]]+‘ | xargs -I {} findfs UUID={}
/dev/sda1
#使用findfs根据LABEL卷标名查询出,前提要操作的分区要有卷标名,不然会报错
[[email protected] ~]# findfs LABEL=`e2label /dev/sdb1`
/dev/sdb1


使用命令设置和查看分区详细信息:

tune2fs  命令  (注意:只用于支持ext类型文件系统类型

用法:

tune2fs  [option]  /dev/dev_part
    -l:       #查询指定文件超级快(super block)信息
     -L ‘LABEL’:  #修改卷标
     -m #:      #调整预留给管理员空间,可能会破坏数据
    -O :      #文件系统启用或禁用,-O  ^has_journal,不加^为启用
    -o :      #调整文件系统的默认挂载
    -U UUID:    #修改UUID号



dumpe2fs  命令  用于查询所有快组及分区数据信息

     -h:查看超级块信息


命令使用实例:

使用tune2fs查看超级块信息

tune2fs  -l  /dev/sdb1     #注意这里指定的是分区设备

技术分享

#如上图,超级块所记录的所有分区的元数据都会被以报表的形式而列举出来


修改指定分区卷标

#查看卷标
[[email protected] ~]# e2label /dev/sdb1
mydata
#设置卷标
[[email protected] ~]# tune2fs -L ‘data‘ /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
#再次查看卷标
[[email protected] ~]# tune2fs -l /dev/sdb1 | grep ‘vol‘ | grep -o ‘[^[:space:]]+$‘
data


修改预留百分比

#先查看此分区被分配了多少个块用于存储设备
[[email protected] ~]# tune2fs -l /dev/sdb1 | grep ‘Block.*count‘
Block count:              131073
#预留的总数大概是总数的1%
[[email protected] ~]# tune2fs -l /dev/sdb1 | grep ‘Rese.*count‘
Reserved block count:     1310
#现在重新调整预留百分比
[[email protected] ~]# tune2fs  -m 5 /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 5% (6553 blocks)

解析:调整后的结果显示出来,%5预留,有6553block,但是这里要注意,如果,调整之前,该分区如果数据已经存满(分配完block),再去调整可能会有数据丢失或损坏。


添加或移除文件系统特性

#查看指定分区文件系统的特性
[[email protected] ~]# tune2fs -l /dev/sdb1 | sed -n ‘s/.*features:[[:space:]]+(.*)$/1/gp‘
has_journal ext_attr resize_inode dir_index filetype sparse_super
解析:这里出现了has_journal表示是ext3及以上的版本才会支持的
#现在去掉日志功能
[[email protected] ~]# tune2fs -O ^has_journal /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
#查看/dev/sdb1的特性功能,已经没有了has_journal
[[email protected] ~]# tune2fs -l /dev/sdb1 | grep ‘features‘
Filesystem features:    ext_attr resize_inode dir_index filetype sparse_super


调整设备默认挂载选项

#查看设备默认挂载选项
[[email protected] ~]# tune2fs -l /dev/sdb1 | grep ‘^Default.*mount.*:‘
Default mount options:    (none)
#修改设备默认挂载选项为支持acl
[[email protected] ~]# tune2fs -o acl /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
#再次查看,这里从没有变成了支持acl
[[email protected] ~]# tune2fs -l /dev/sdb1 | grep ‘^Default.*mount.*:‘
Default mount options:    acl

注意:如果同时设置多个默认挂载选项,可以使用 , 隔开


 

使用dumpe2fs查看所有含有super block信息备份的块组

#查看有多少个快组
[[email protected] ~]# dumpe2fs /dev/sdb1 2> /dev/null  | grep ‘^Group[[:space:]]‘ | wc -l
16
#列出所有包含有super block中的快组
[[email protected] ~]# dumpe2fs /dev/sdb1 2>/dev/null | grep -B2 ‘super.*block‘ | grep ‘[^-]‘ | grep -o ‘^Group[[:space:]][0-9]+‘
Group 0                    # 0 号块组一般放primary super block
Group 1                    #以下的块组存放了super block的备份
Group 3
Group 5
Group 7
Group 9

解析:因为super block 保存了一个文件系统所产生的所有元数据,一旦受到破坏,可能整个文件系统都无法使用,这时有了超级块的备份存在,就可以通过备份进行文件系统的修复。


使用命令进行文件系统的检查、修复:

通用命令

fsck 命令

用法:

fsck   /dev/part_name  :     默认不指定为自动识别分区文件系统类型

fsck.TYPE                 指定文件系统类型:比如fsck.ext3

指定选项:

fsck  [option]   /dev/part_name
     -t  FS_TYPE   #同样指定文件系统类型:比如fsck  -t  xfs
     -a         #表示为自动修复
     -r          #交互式检查


专用于ext系列文件系统

e2fsck 命令

选项用法:

e2fsck  [option]  /dev/part_name
       -f     #表示为强制检查
       -y     #自动回答为yes

[[email protected] ~]# fsck -a /dev/sdb1 
fsck from util-linux-ng 2.17.2
data: clean, 11/32896 files, 5707/131073 blocks

注意:clean表示为block为没有损坏


本文出自 “神剑特兰克斯” 博客,请务必保留此出处http://mengzhaofu.blog.51cto.com/10085198/1843594

linux入门之磁盘管理分区管理

Linux入门之磁盘管理(1)分区管理无论是windows还是linux,目前支持的分区结构只有两种,一种是基于blos检查启动的mbr结构,另一种是基于uefi(统一扩展固件接口)的opt分区结构。当然,目前广泛的还是使用的mbr结构。linux中有很多... 查看详情

linux入门之磁盘管理/etc/fstab与交换分区

Linux入门之磁盘管理(4)/etc/fstab与交换分区在linux通过挂载命令可以使用各种选项进行不同文件系统的设备文件进行挂载,当然不仅限于块设备,但是无论怎么挂载,一般默认新建的文件系统进行挂载开机是不会自动挂载的,每次... 查看详情

linux入门之磁盘管理磁盘配额

Linux入门之磁盘管理(6)磁盘配额在linux中使用向磁盘中存入数据时,如果有多个用户对同个磁盘进行操作,其中一个用户放了很大数据的文件导致硬盘容量用光,那么其他用户将无法再存入数据,这时就需要对每个用户进行存入... 查看详情

linux入门之磁盘管理raid的实现

Linux入门之磁盘管理(7)RAID的实现RAID(RedundantArraysofInexpensiveIndependentDisks)被称为廉价冗余阵列,为了提高磁盘的性能或者保存数据完整,将多个磁盘合成一个“阵列”来提供更好的性能、冗余等。RAID一般使用硬件raid,并配合指定ra... 查看详情

linux入门之磁盘管理dd命令使用

Linux入门之磁盘管理(5)dd命令使用在Linux中,经常需要一些数据读写等测试,还有文件以及其它数据的备份迁移,一般使用cp命令可以解决一部分,但是其无法进行控制数据的流向及动作,这时就可以使用dd命令,来进行灵活的数... 查看详情

linux入门之磁盘管理lvm逻辑卷的使用

Linux入门之磁盘管理(8)LVM逻辑卷的使用在Linux中虽然有raid来保证数据的稳定以及磁盘性能的提高,但是其扩展性并不是很好,在很多生产环境中,都是数据正在使用中,在这时如果中断一段时间就会有很大的损失,因此Linux提供... 查看详情

linux入门之磁盘管理lvm逻辑卷案例

Linux入门之磁盘管理(9)LVM逻辑卷案例案例介绍阶段(1):创建一个由两个物理卷组成的大小未20G的卷组myvg,要求其PE大小为16M;而在此卷组中创建一个大小未5G的逻辑卷lvtest,此逻辑卷要能在开机后自动挂载至/mnt/lvtest目录,且... 查看详情

linux运维从入门到进阶(代码片段)

 Linux磁盘管理知识点磁盘和文件系统简介文件系统工具磁盘分区管理交换分区逻辑卷和阵列  磁盘和文件系统介绍正如上文中提到的,Linux中一切都是文件。这个重要的概念贯穿整个Linux的始末,磁盘也是如此。各种接... 查看详情

新手入门linux的步骤

新手想要快速入门学习Linux,要制定合适的学习路线,这样才可以达到事半功倍的效果。第一阶段:linux基础入门1.开班课程介绍-规章制度介绍-破冰活动;2.Linux硬件基础/Linux发展历史;3.Linux系统安装/xshell连接/xshell优化/SSH远程... 查看详情

磁盘及文件管理系统入门

linux磁盘及文件系统管理初步目录    1.磁盘及文件系统管理    2.机械磁盘结构    3.mknod命令    4.parted命令    5.GPT分区&UEFI &n 查看详情

磁盘及文件管理系统入门

linux磁盘及文件系统管理初步目录    1.磁盘及文件系统管理    2.机械磁盘结构    3.mknod命令    4.parted命令    5.GPT分区&UEFI &n 查看详情

嵌入式linux从入门到精通之第十节:系统编程之进程

进程的定义程序:程序是存放在存储介质上的一个可执行文件。进程:进程是程序的执行实例,包括程序计数器、寄存器和变量的当前值。程序是静态的,进程是动态的:程序是一些指令的有序集合,而进程是程序执行的过程。... 查看详情

嵌入式linux从入门到精通之第九节:系统编程

系统编程概述在讲解系统编程之前,先了解几个概念:操作系统的作用:操作系统用来管理所有的资源,并将不同的设备和不同的程序关联起来。什么是Linux系统编程?在有操作系统的环境下编程,并使用操作系统提供的系统调... 查看详情

嵌入式linux从入门到精通之第九节:系统编程

系统编程概述在讲解系统编程之前,先了解几个概念:操作系统的作用:操作系统用来管理所有的资源,并将不同的设备和不同的程序关联起来。什么是Linux系统编程?在有操作系统的环境下编程,并使用操作系统提供的系统调... 查看详情

linux之shell脚本实战监控系统的磁盘空间使用率(代码片段)

【Linux之Shell脚本实战】监控系统的磁盘空间使用率一、脚本要求二、检查本地系统环境1.检查系统版本2.检查系统内核版本三、编写disk.sh脚本1.创建脚本目录2.编写disk.sh脚本3.执行测试脚本四、查看脚本执行日志文件五、本次实... 查看详情

linux系统磁盘管理

一、磁盘设备基础知识1、一切皆文件  文件操作:create(),open(),read(),write(),close()2、设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 设备号码: 主设备号:majornumber,标识设备类型 次设备号:mi... 查看详情

入门学习linux&&git命令大集合(代码片段)

文章目录LinuxLinux常识操作系统概述Linux发展史Linux版本Linux安装--安装步骤Linux常见目录介绍Linux常用命令基础+磁盘+文件管理命令进阶命令文本编辑vimLinux系统管理软件包管理网络管理进程管理磁盘管理GitGit常识Git常用基本... 查看详情

入门学习linux&&git命令大集合(代码片段)

文章目录LinuxLinux常识操作系统概述Linux发展史Linux版本Linux安装--安装步骤Linux常见目录介绍Linux常用命令基础+磁盘+文件管理命令进阶命令文本编辑vimLinux系统管理软件包管理网络管理进程管理磁盘管理GitGit常识Git常用基本... 查看详情