Linux系统管理使用之磁盘及文件系统

本文详细介绍了Linux系统中的磁盘物理构成,包括扇区、磁道、磁头和柱面。讲解了分区的概念,强调了MBR在分区管理中的作用。接着讨论了文件系统,特别是inode的作用和文件的属性。还涵盖了块组、超级块等文件系统构成要素。最后,文章涉及了挂载、交换分区、自动挂载配置以及VFS在Linux文件系统中的重要角色。

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

磁盘及文件系统

 

硬盘的物理构成:

 

扇区(sector)、磁道(track)、磁头、柱面(cylinder)

 

分区:就是记录每一个分区的起始柱面和结束柱面。分区信息存放在0柱面0磁头1扇区上:MBR主引导记录(446字节)+DPT磁盘分区表(64字节)+结束标志(2个字节)硬盘的主引导记录(MBR)是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的

 

操作系统,并用主分区信息表来管理硬盘。

 

文件系统是操作系统用于明确存储设备(常见的是磁盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

 

block:数据存储的最小单元

 

inode:索引节点,全局唯一编号,除了记录文件的属性外,同时还具有指针功能,指向文件内容放置的快

 

(里面保存的是文件的权限,所有者,所属主等基本信息)

 

1、文件的拥有者与用户组(owner/group)

 

2、文件的访问模式(read/write/excute)

 

3、文件的类型(type)

 

4、文件建立或状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改时间(mtime)

 

5、文件的大小

 

6、定义文件属性的标志(flag),如setUID...

 

7、文件真正内容的指针(pointer)

 

创建目录:分配一个inode和至少一个block

 

inode记录该目录的相关属性,并指向分配到的那个快;

 

block记录在这个目录下的相关文件(或目录)的关联性

 

创建文件:分配至少一个inode与相对于该文件大小的快数量

 

inode不记录文件名,而是记录文件的相关属性,文件名记录在目录所属的block区域

 

例如:读取/etc/crontab的流程如下:

 

1、操作系统根据根目录(/)的相关数据可获取/etc目录所在的inode,并读取/etc这个目录所有相关属性

 

2、根据/etc的inode的数据,可以获取/etc目录下所有文件的关联数据是放置在哪一个block中,并前往该block读取文件的关联性内容

 

3、由上步骤的block中,可以知道crontab文件的inode所在地,并前往该inode

 

4、由上步骤的inode中,可以获取crontab文件的所有属性,并前往由inode所指向的block区域,获取crontab文件内容

 

块组:blockgroup 对用户是不可见的,子逻辑区域,有个超级标示区

 

文件系统构成:(dumpe2fs可以查看)

 

superblock(超级块):记录整个文件系统相关信息

 

1、block与inode的总量

 

2、未使用和已使用的inode/block数量

 

3、文件系统的载入时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息

 

4、有效位的值,已载入为0,未载入为1

 

groupdescription(组描述):记录此block由何处开始记录

 

blockbitmap(快位图):此处记录block是否使用

 

inodebitmap(inode位图):此处记录inode是否使用

 

inodetable(inode表):为每个inode的数据存放区

 

datablock(数据块):为每个block的数据存放区

 

 

metadatabitmap (块位图)dentry 目录项

 

创建文件:先在目录下创建一个条目,把名字和iNode对应上,回到源数据,指定块位置

 

删除文件:删除条目里面的名字和iNode对应关系,将对应的iNode标记为0

 

通过inode号码来删除文件:find./ -inum 400935 -exec rm -rf {} \;

 

extundelete:linux下高效数据恢复工具 http://extundelete.sourceforge.net/ 安装时需要的依赖包e2fsprogs-lib e2fsprogs-devel 复制文件:不同的inode和block

 

剪切文件:同一个分区,inode号和磁盘块位置都没有变,只是把条目里面的名字改变了一下

 

链接:硬链接和软链接(符号链接),多个文件指向同一个iNode,硬链接;符号连接,指向的是源文件的路径,而不是文件块ln (link) [-s -v] 源文件 链接

 

硬链接:在某个目录下的block中增加一个文件关联数据,不会用到inode与磁盘空间

 

只能对文件进行创建,为了避免循环引用

 

不能跨文件系统,可以在不同目录下

 

创建硬链接可以增加文件被连接的次数

 

符号链接:建立一个独立的文件,这个文件会让数据的读取指向它连接的文件内容

 

可以对目录创建

 

可以跨文件系统

 

不会增加被链接文件的链接次数

 

其大小为指定路径所包含的字符个数

 

-b删除,覆盖以前建立的链接

 

-d允许超级用户制作目录的硬链接

 

-f强制执行

 

-i交互模式,文件存在则提示用户是否覆盖

 

-n把符号链接视为一般目录

 

-s软链接(符号链接)

 

-v显示详细的处理过程


du  查看文件大小[-s -h ]

 

-s只分别计算命令列中每个参数所占的总用量

 

-h做单位转换

 

df   查看硬盘使用情况

 

-i查看inode的使用情况

 

-P不换行显示

 

-h做单位转换

 

设备文件:

 

b:块设备文件,以块为单位,随机访问

 

c: 以字符为单位,是线性设备,访问时有先后顺序

 

例:ls-l /dev

 

主设备号(标示设备类型,majornumber)

 

次设备号(标示同一类型的不同设备,minornumber)

 

创建设备文件:mknod-m name type major ninor

 

 

硬盘的设备文件名:

 

IDE ATA :hd

 

SATA SCSI USB :sd

 

ab c ....来区别同一种类型下的不同设备

 

IDE: 第一个IDE口,控制器,主 从hda hdb

 

第二个IDE口,主从hdc hdd

 

 

 

fdisk查看当前系统识别的硬盘和分区的情况

 

fdisk -l[/dev/to/smoe_device_file]

 

还可用来管理分区

 

fdisk /dev/sda

 

p:显示当前硬件的分区,包括没有保存的改动

 

n:创建一个新的分区

 

d:删除一个分区

 

w:保存并退出

 

q:不保存退出

 

t:修改分区类型(文件系统类型)

 

l:显示所支持的所有类型

 

cat/proc/partitions  查看分区

 

partprobe[/dev/sda] 通知操作系统分区表的变化

 

partx -a [/dev/sda]    告诉内核磁盘分区是否存在及其编号

 

cat/proc/filesystem 查看文件系统类型

 

 

高级格式化:mkfs-t ext4

 

mkfs -t msdos /dev/hdb3

 

mkfs.ext2、mkfs.ext3、mke2fs

 

-b:分区时设定每个数据区块占用空间大小,目前支持1024,2048 以及4096 bytes每个块。

 

-i:设定inode大小

 

-N:设定inode数量,有时使用默认的inode数不够用,所以要自定设定inode数量。

 

-c:在格式化前先检测一下磁盘是否有问题,加上这个选项后会非常慢

 

-L:预设该分区的标签label

 

-j:建立ext3格式的分区,如果使用mkfs.ext3就不用加这个选项了

 

查看磁盘超级块的信息:

 

tune2fs-l /dev/sda[n]  调整ext2/ext3/ext4文件系统参数

 

dumpe2fs-h /dev/sda[n] 显示ext2/ext3/ext4文件系统信息

 

二.swap

 

swap分区:主要是用来内存过载使用,可以和内存上暂停进程的页面保存在swap分区中,再次启用时再分配页面,pageoutswap分区:主要是用来内存过载使用,可以和内存上暂停进程的页面保存在swap分区中,再次启用时再分配页面,pageoutpagein ,swap out swap in ,发现有频繁的换进和换出的时候就需要加内存。

 

1.虚拟内存:

 

虚拟地址:线性地址;

 

页面的换进和换出,允许了内存的过载使用

 

计存器1纳秒,缓存10纳秒,内存10毫秒,磁盘秒


free 查看物理内存和交换空间使用情况

 

-m

 

buffers缓冲cached 缓存

 

fdisk命令中,调整分区类型为82;

 

创建交换分区:

 

格式化:#mkswap /dev/sda8,先调整分区类型为82,fdisk,

 

-L LABEL

 

swapon/dev/sda8,启用该交换空间

 

-a:启用所有的定义在/etc/fstab文件中的交换设备

 

swapoff /dev/sda8

 

回环设备

 

loopback,使用软件来模拟实现硬件

 

创建一个镜像文件,120G,当作一个硬件设备来使用

 

dd命令:

 

if=数据来源

 

of=数据存储目标

 

bs=1

 

count=2

 

seek=#:创建数据文件时,跳过的空间大小;

 

dd  if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1 ddif=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1

可用来备份和恢复mbr

 

dd if=/dev/zeroof=/var/swapfile bs=1M count=1024 seek 跳过多大的空间

 

mkswap格式化为swap分区

 

1、通过fdisk创建swap分区或者使用dd命令创建一个虚拟内存的文件

 

dd if=/dev/zeroof=/tmp/swap bs=1M count=1024 2、mkswap进行swap分区格式化

 

3、swapon激活swap分区

 

swapoff关闭swap分区

 

mount:挂载命令

 

命令格式:mount[-t vfstype] [-o options] device dir

 

-a挂载fstab中提到的所有文件系统

 

-oremount 重新挂载已挂载的文件系统

 

-oloop:用来把一个文件当成硬盘分区挂接上系统

 

-oro:采用只读方式挂接设备

 

-orw:采用读写方式挂接设备

 

挂接光盘镜像文件

 

1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。

 

#cp/dev/cdrom /home/sunky/mydisk.iso 或

 

#ddif=/dev/cdrom of=/home/sunky/mydisk.iso

 

2、挂载光盘镜像文件

 

#mount -o loop -t iso9660 /home/sunky/mydisk.iso/mnt/vcdrom

 

三.自动挂载

 

文件系统的配置文件/etc/fstab

 

OS在初始时,会自动挂载此文件中定义的每个文件系统

 

要挂载的设备 挂载点 文件系统类型挂载选项 转储频率(每多少天做一次完全备份) 文件系统检测次序(只有根可以为1)

 

/dev/sda5 /mnt/test ext4 defaults 0 0

 

mount-a:挂载/etc/fstab文件中定义的所有文件系统

 

/etc/fstab文件 实现开机自动挂载

 

设备挂载点 文件系统类型 挂载参数 是否执行备份命令dump 是否启动使用fsck扫描磁盘

 

fuser:验正进程正在使用的文件或套接字文件

 

-v:查看某文件上正在运行的进程

 

-k:

 

-m:针对目录,也就是挂载点,一般和-k一起使用

 

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

 

wodim--devices 查看设备名(没有挂载的光盘)

 

练习:

 

1、创建一个5G的分区,文件系统为ext4,卷标为MYDATA,块大小为1024,预留管理空间为磁盘分区的3%,要求开机后可以自动挂载至/data目录,并且自动挂载的设备要使用卷标进行引


用;

 

2、创建一个本地回环文件/var/swaptemp/swapfile来用于swap,要求大小为512MB,卷标为SWAP-FILE,且开机自动启用此交换设备;

 

# mkdir/var/swaptemp

 

# ddif=/dev/zero of=/var/swaptemp/swapfile bs=1M count=512

 

# mkswapLABLE=SWAP-FILE /var/swaptemp/swapfile

 

/etc/fstab

 

/var/swaptemp/swapfile swap swap defaults 0 0

 

3、上述第一问,如何让其自动挂载的同时启用ACL功能;

 

/etc/fstab

 

LABEL='MYDATA' /data ext4 defaults,acl 0 0

 

 

 

 

Linux: 查看VFS结构图

 

VFS:virtual filesystem,interface:system call

 

当前,除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统,比如reiserfs,xfs, Windows的vfat NTFS,

 

网络文件系统nfs以及flash文件系统jffs2,yaffs/yaffs2 ubifs。

 

linux通过叫做VFS的中间层对这些文件系统提供了完美的支持。

 

VFS存在的意义

 

1.向上,对应用层提供一个标准的文件操作接口;

 

2.对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;

 

3.VFS内部则通过一系列高效的管理机制,比如inodecache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;

 

4.此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单

 

VFS是一种软件机制,也许称它为Linux 的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。所以在每次系统初始化期间,Linux 都首先要在内存当中构造一棵VFS 的目录树(在 Linux 的源代码里称之为namespace),实际上便是在内存中建立相应的数据结构。

 

VFS:virtual filesystem 中间层

 

每个分区都是一个单独的文件系统

 

物理和逻辑之间的关系


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值