Linux磁盘与文件系统管理

Inode

Linux文件传统文件系统为Ext2,该文件系统内主要信息有:

superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

inode:记录文件的属性权限类型等信息(统称为Meta data 元数据),一个文件占用一个inode,同时记录此文件的数据所在的block号;

block:实际记录文件的内容,若文件太大,会占用多个block;

释义

目录

目录是特殊的文件,保存了目录内文件与Inode之间的映射。

cp

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode号关联
  • 拷贝数据生成新的文件

rm

  • 链接数递减,从而释放的inode号可被重复利用
  • 把数据放在空闲列表中
  • 删除目录项
  • 数据实际上不会被马上删除,但当另一个文件使用block时将被覆盖

情景:提示空间快满,使用rm删除了很大的无用文件后,df仍看到空间不足,为什么,如何解决?

删除大文件方法

cat /dev/null > test.txt  &&  rm -f test.txt

目的:删除大文件同时释放其占用的临时空间。

lsof | grep deleted

用于查找所有已经被删除但仍被某些进程打开的文件,这些文件在 lsof 的输出中会特别标注为 (deleted),以示它们已经从文件系统中删除,但由于某些进程仍然持有文件描述符,所以它们实际上还没有被释放。

COMMAND  PID     USER   FD      TYPE DEVICE  SIZE      NODE NAME
cat     12345 username   20r    REG    0,1   95843 123456789 /path/to/deleted/file (deleted)

mv

  • mv命令的目标和源在相同的文件系统
    • 用新的文件名创建对应的目录项
    • 删除旧目录条目对应的旧的文件名
    • 不影响inode表或磁盘上的数据位置,没有数据被移动
  • 源和目标在不同的文件系统,相当于cp和rm

磁盘与目录的容量

常用命令:

df:列出文件系统的所占用的磁盘空间。

  • -a :列出所有的文件系统,包括系统特有的/proc等文件系统。
  • -h :以易读的形式显示出来(KB,MB,GB等格式)。
  • -i :以inode数量来显示。

du:查看文件或目录所占用的磁盘空间。

  • -h :以易读的形式显示出来。
  • -s :列出总量,不列出每个文件或目录占用空间。

实体链接与符号链接

实体链接:Hard Link 硬链接。不能跨文件系统,不能link目录。源文件被删除后依旧能使用。

符号链接:Symbolic Link 软链接。相当于快捷方式。源文件被删除后不能使用。

常用命令:

ln [选项] 来源文件 链接文件

  • -s:加此参数为软链接;不加参数默认为硬链接。
  • -f:如果链接文件存在,就将移除旧文件建立新链接文件。

磁盘的使用必须经过分区、格式化、挂载。

查看磁盘分区

lsblk:查询磁盘列表。

-p:显示全路径

blkid:查询设备或文件系统的UUID。

parted:查询磁盘分区表类型与分区信息。

命令:parted 设备名称 print

无需重启检测新加硬盘

Linux系统都是通过SCSI子系统进行管理磁盘,无论是SCSI、SATA、NVME等。

第一步:列出当前系统中所有的SCSI主机总线

[root@wenzi ~]$ls /sys/class/scsi_host/
host0  host1  host2

第二步:使各个 hostx 总线重新扫描其下连接的设备

有几个 hostx 写几次

[root@wenzi ~]$echo "- - -" > /sys/class/scsi_host/host0/scan
[root@wenzi ~]$echo "- - -" > /sys/class/scsi_host/host1/scan
[root@wenzi ~]$echo "- - -" > /sys/class/scsi_host/host2/scan

最后再查看fdisk -l 查看即可

磁盘分区

parted:操作都是实时生效的,无交互式确认

parted [选项] ... [设备 [命令 [参数]...]...]

常用选项:

-l:显示所有硬盘分区信息

-s:不输出提示信息

常用子命令:

align-check TYPE N:检查分区是否满足对齐(最小|最佳)类型的对齐

mklabel 或 mktable LABEl-TYPE:指定磁盘的分区类型 gpt或msdos(mbr)

mkpart PART-TYPE [FS-TYPE] START END:新建分区,指定分区类型,文件系统,开始位置、结束位置

name NUMBER NAME:重命名指定分区

print [devices|free|list,all|NUMBER]:显示

quit:退出

rescue START END:空间碎片整理

resizepart NUMBER END:重置分区大小

rm NUMBER:删除指定分区

select DEVICE:选择设备

unit UNIT:设置默认单位,默认MB,可选B|KB|MB|GB|TB

fdisk:MBR分区表分区工具

fdisk [选项] 硬盘

-b:指定分区大小

-l:显示指定硬盘或分区信息

-o:只显示指定列

-u:指定显示的单位,默认是sectors,可选 cylinders 或 sectors

-t:只显示指定类型的分区表

交互过程中常用选项:

p:输出分区列表

t:更改分区类型

n:创建新分区

d:删除分区

v:校验分区

u:转换单位

w:保存并退出

q:不保存退出

x:高级功能

gdisk:GPT分区表分区工具

gdisk [-l] device

交互过程中常用选项:

c:修改分区名

d:删除分区

i:显示分区详细信息

l:列出所有分区类型

n:新建分区

p:查看分区

t:修改分区类型,默认8300,表示普通分区

q:退出

w:保存退出

x:高级功能

同步分区表

CentOS7/8

partprobe 命令重新加载分区信息。

CentOS6

如:partx -a /dev/sda

磁盘格式化

磁盘格式化=建立文件系统

mkfs.XXX  分区名

包含mke2fs功能,更通用。

例:mkfs.xfs /dev/sda1  、  mkfs.ext4 /dev/sda2

mke2fs -t [ext2或ext3] 分区名

ext系列文件系统专用工具

例:mke2fs -t ext3 /dev/sda1

其它相关

tune2fs [选项] 设备

重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统信息

-L label:修改卷标

-m N:修改预留给管理员的空间百分比

-j:将ext2升级为ext3

-U uuid:修改uuid号

文件系统检查/修复

xfs文件系统

xfs_info 挂载点\设备名

显示已挂载的xfs文件系统信息

xfs_repair 【-fnd】 分区名称

  • -f  后面跟文件,而不是分区
  • -n  单纯检查并不修改文件系统数据
  • -d  允许修复只读的挂载设备,通常在单人模式,针对/根目录进行检查与修复,然后立即reboot。危险,不要随便使用

xfs_repair /dev/sda3 

xfs_repair /dev/centos/home 

xfs_repair /dev/mapper/centos_hk1–h2–074-home

ext4文件系统

fsck.xxx [选项] 分区名

包含e2fsck,更通用

  • -a:自动修复
  • -r:交互式修复错误
  • -p 当文件系统修复时,如有需要回复y的动作,自动回复y来继续
  • -f  强制检查

例:fsck.ext4  /dev/sda4

ext系列文件系统

e2fsck [选项] 分区名

-y:自动回答为yes

-f:强制修复

-p:自动进行安全的修复文件系统问题

注意:

  • 通常只有身为root且文件系统有问题时才使用repair/fsck命令,正常情况下使用,会造成系统损害。通常在单人模式下进行。
  • 检查修复已经挂载的文件系统需要先卸载该文件系统,再检查修复,再恢复挂载。

文件系统挂载与卸载

挂载点的意义即通过挂载点进入磁盘分区槽(文件系统)

  • 单一文件系统不应被重复挂载在不同挂载点。
  • 单一目录不应该重复挂载多个文件系统。
  • 要作为挂载点的目录,理论上都应该为空目录。若不是空目录,则旧目录信息会暂时隐藏,显示新挂载文件系统的内容,当卸载此文件系统后旧目录信息会恢复。

查看挂载信息

mount

[root@wenzi ~]#mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
......
/dev/sda1 on /boot type ext4 (rw,relatime,data=ordered)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=186300k,mode=700)

cat /etc/mtab

[root@wenzi ~]#cat /etc/mtab
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
......
/dev/sda1 /boot ext4 rw,relatime,data=ordered 0 0
tmpfs /run/user/0 tmpfs rw,nosuid,nodev,relatime,size=186300k,mode=700 0 0

 cat /proc/mounts

[root@wenzi ~]#cat /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
......
/dev/sda1 /boot ext4 rw,relatime,data=ordered 0 0
tmpfs /run/user/0 tmpfs rw,nosuid,nodev,relatime,size=186300k,mode=700 0 0

查看正在访问指定文件系统的进程

lsof 挂载点

fuser -v 挂载点

终止所有正在访问指定文件系统的进程

fuser -km 挂载点

挂载

mount -a  根据配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上。

mount 装置文件名 挂载点

mount UUID=” 挂载点

卸载

umount 装置文件名/挂载点

设定开机挂载

开机挂载需要修改 /etc/fstab 文件。文件内容格式:

【装置/UUID】 【挂载点】 【文件系统】 【文件系统参数】 【dump】 【fsck】

/dev/mapper/centos-root  /  xfs  defaults  0  0

UUID=94ac5f77-cb8a-495e-a65b-2ef7442b837c  /boot  xfs  defaults  0  0

注意:

  1. 根目录/是必须挂载的,并且是第一个被挂载的。
  2. 挂载点必须是已建立的目录,可任意指定,但一定要遵守FHS目录架构原则。
  3. 所有挂载点在同一时间只能挂载一次。
  4. 所有分区在同一时间只能挂载一次。
  5. 如需卸载挂载点,当前工作目录不能是该挂载目录。

重新挂载

修改 /etc/fstab 文件中的挂载规则后,无法通过mount -a 生效。要执行挂载

mount -o remount 挂载点

挂载光盘/DVD

mount -o loop 光盘或DVD目录 /挂载点

mount -o loop /tmp/centos7.iso /data/centosdvd

创建一个大型文件实现挂载特殊文件loop的挂载

创建一个512M大型空文件 

dd if=/dev/zero of=/srv/loopdev bs=1M  count=512

格式化此文件

mkfs.xfs -f /srv/loopdev

挂载

mount /srv/loopdev 挂载点

内存置换空间(swap)的建立

swap交换分区是系统RAM的补充。当没有足够的RAM保存系统处理的数据时会将数据写入swap分区,当系统缺乏swap时,内核会因为RAM耗尽而终止进程

系统物理内存RAM推荐swap空间
<=2GB2倍的RAM
2GB ~ 8GB等于RAM
8GB ~ 64GB4GB 至 RAM的0.5倍

swapon:启用交换分区

swapon [选项] [目标]

选项:

-a:激活 /etc/fstab 中所有的交换分区

-s:显示已使用的交换分区信息

目标:

-U uuid:指定UUID

device:要使用设备的名称

filename:要使用的文件名称

swapoff:禁用交换分区

swapoff [选项] [目标]

选项:

-a:禁用 /proc/swaps 中所有的交换分区

-v:显示过程

目标:

-U uuid:要使用设备的UUID

device:要使用设备的名称

filename:要使用的文件名称

实体分区建立swap

  1. 使用 fdisk 或 gdisk 建立分区,GUID为8200,partprobe 重新加载分区。
  2. 使用 mkswap 分区名 格式化为swap格式。

临时

  1. 使用 swapon 分区名 使用swap。
  2. 使用 free 和 swapon -s 这个指令观察内存。
  3. 使用 swapoff 分区名 关闭swap。

永久

  1. 在 /etc/fstab 添加相关条目
  2. 使用 swapon -a 激活交换空间
查看现有磁盘空间,使用/dev/sdb创建新的swap
[root@wenzi ~]#lsblk -p
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0   20G  0 disk
├─/dev/sda1   8:1    0    1G  0 part /boot
├─/dev/sda2   8:2    0    2G  0 part [SWAP]
└─/dev/sda3   8:3    0   17G  0 part /
/dev/sdb      8:16   0   20G  0 disk
/dev/sr0     11:0    1 1024M  0 rom

创建新swap的挂载点 /newswap
[root@wenzi ~]#mkdir /newswap

从/dev/sdb中划分2GB作为swap分区
[root@wenzi ~]#fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6af4854b.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@wenzi ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   17G  0 part /
sdb      8:16   0   20G  0 disk
└─sdb1   8:17   0    2G  0 part
sr0     11:0    1 1024M  0 rom

格式化为swap文件系统
[root@wenzi ~]#mkswap /dev/sdb1
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=7b86c860-787e-4626-8dfe-2d0049f60097

编辑/etc/fstab
[root@wenzi ~]#\cat /etc/fstab
...
UUID=7b86c860-787e-4626-8dfe-2d0049f60097 /newswap                 swap    defaults       0 0

挂载swap
[root@wenzi ~]#swapon -a
查看已使用的swap
[root@wenzi ~]#swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       2097148 0       -2
/dev/sdb1                               partition       2097148 0       -3
[root@wenzi ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   17G  0 part /
sdb      8:16   0   20G  0 disk
└─sdb1   8:17   0    2G  0 part [SWAP]
sr0     11:0    1 1024M  0 rom

使用策略

/proc/sys/vm/swappiness 的值决定了内存占用达到一定的百分比时,会启动swap。

规则

当内存使用率达到 100-swappiness 时,会启用swap。

swappiness值越大,越倾向于使用swap;为0时,最大限度降低使用swap的可能性,并非禁用swap。

修改

CentOS7/8默认的swappiness值是30,即当内存使用率达到70时,启用swap

[root@wenzi ~]#cat /proc/sys/vm/swappiness
30
[root@wenzi ~]#vim /etc/sysctl.conf
vm.swappiness=0

生效 sysctl -p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值