Linux教程

Linux磁盘及文件管理系统

本文主要是介绍Linux磁盘及文件管理系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录:

  • Linux磁盘及文件系统管理
      • 1、什么是磁盘:
      • 2、磁盘运行机理:
      • 3、磁盘的分类:
      • 4、查看磁盘分区信息命令
      • 5、linux-fdisk命令详解
      • 6、格式化Mkfs
      • 7、磁盘挂载Mount
      • 8、永久挂载
      • 10、生成磁盘故障案例
      • 11、总结
      • 12、为什么要挂载?

Linux磁盘及文件系统管理

机械hdd与固态ssd

SSD才有电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,拥有极高的存储性能SSD无查找延迟,存储于读取速度快同时防震抗摔

创建文件系统:

格式化: 低级格式化(分区之前进行,划分磁道)、高级格式化(分区之后对分区)

1、什么是磁盘:

磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写。绝大多数磁盘被永久封存在一个密封的盒子里。

img

img

2、磁盘运行机理:

简单来说就是多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据

3、磁盘的分类:

(1)IDE磁盘:特点价格低廉,兼容性强,性价比高,数据传输慢,不支持热插拔等等。 并口,133MBps
(2)SCSI磁盘:传输速率高,读写性能好,运行稳定,可连接多个设备。可支持热插拔,占用CPU低,但是价格相对来说比较贵,一般用于工作站或服务器上。
(3)SATA磁盘:结构简单、支持热插拔 串口, 6gbps
(4)USB 串口,3.0 480MBps

(5) SAS: 串口,6gbps

其中IDE的磁盘的文件名为          /dev/hd[a-d]
而SCSI、SATA、USB的磁盘文件名为     /dev/sd[a-p]

4、查看磁盘分区信息命令

  • 使用df命令查看磁盘容量,不加参数以k为单位
  • di -i //查看inode使用情况
  • df -h //以G或者T或者M人性化显示
  • df -T //查看文件类型

**1.**使用df命令查看磁盘,下面分别介绍每一列是什么含义.

[root@ltt test]$df  -h 
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 2.0G     0  2.0G    0% /dev
tmpfs                    2.0G     0  2.0G    0% /dev/shm
tmpfs                    2.0G   12M  2.0G    1% /run
tmpfs                    2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  1.7G   16G   10% /
/dev/sda1               1014M  138M  877M   14% /boot
tmpfs                    394M     0  394M    0% /run/user/0

2.使用lsblk查看分区使用情况 最常用

[root@ltt test]$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   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.4G  0 rom  

3.使用du命令查看目录或者文件的容量,不加参数以k为单位

[root@ltt home]$du -sh  
88K	

4.fdisk -l查看分区使用情况 比较常用

[root@ltt test]$fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0001824d

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

5.gdisk -l查看分区使用情况 一般常用

[root@ltt ~]$ gdisk -l
GPT fdisk (gdisk) version 0.8.10

Problem opening -l for reading! Error is 2.
The specified file does not exist!

m.2 固态硬盘

5、linux-fdisk命令详解

fdisk 操作硬盘的命令格式如下:

[root@ltt ~]# fdisk 设备

比如我们通过 fdisk -l 得知 /dev/hda 或者 /dev/sda 设备;我们如果想再添加或者删除

一些分区,可以用

[root@ltt ~]# fdisk /dev/hda

fdisk 的说明;

当我们通过 fdisk 设备,进入相应设备的操作时,会发现有如下的提示;以 fdisk /dev/sda

设备为例,以下同;

[root@ltt ~]# fdisk /dev/sda

Command (m for help): 在这里按 m ,就会输出帮助;

Command action

a toggle a bootable flag

b edit bsd disklabel

c toggle the dos compatibility flag

d delete a partition 注:这是删除一个分区的动作;

l list known partition types 注:l 是列出分区类型,以供我们设置相应分区的类型;

m print this menu 注:m 是列出帮助信息;

n add a new partition 注:添加一个分区;

o create a new empty DOS partition table

p print the partition table 注:p 列出分区表;

q quit without saving changes 注:不保存退出;

s create a new empty Sun disklabel

t change a partition's system id 注:t 改变分区类型;

u change display/entry units

v verify the partition table

w write table to disk and exit 注:把分区表写入硬盘并退出;

x extra functionality (experts only) 注:扩展应用,专家功能;

警告:删除分区时要小心,请看好分区的序号,如果您删除了扩展分区,扩展分区之下的逻

辑分区都会删除;所以操作时一定要小心;如果知道自己操作错了,请不要惊慌,用 q 不保

存退出;切记切记!!!!在分区操作错了之时,千万不要输入 w 保存退出!!!

通过 fdisk 的 n 指令增加一个分区;

Command (m for help): p

Disk /dev/sda: 1035 MB, 1035730944 bytes

256 heads, 63 sectors/track, 125 cylinders

Units = cylinders of 16128 * 512 = 8257536 bytes

Device Boot Start End Blocks Id System

/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)

/dev/sda2 26 125 806400 5 Extended

/dev/sda5 26 50 201568+ 83 Linux

Command (m for help): n 注:增加一个分区;

创建分区成功记得同步磁盘信息

[root@ltt ~]$partprobe
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。  不影响

[root@ltt ~]$partprobe  /dev/sdb
//查看分区信息
[root@ltt ~]$cat /proc/partitions 
major minor  #blocks  name

   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
  11        0    4601856 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1
   8       16   20971520 sdb
   8       17     102400 sdb1
   8       18    5242880 sdb2
   8       19   15625216 sdb3
   8       32 3145728000 sdc

还可以查看日志:

[root@ltt ~]$tail /var/log/messages
Oct 24 17:22:32 ltt systemd-logind: New session 2 of user root.
Oct 24 17:22:56 ltt systemd: Can't open PID file /run/sendmail.pid (yet?) after start: No such file or directory
Oct 24 17:22:56 ltt systemd: Started Sendmail Mail Transport Agent.
Oct 24 17:22:56 ltt systemd: Starting Sendmail Mail Transport Client...
Oct 24 17:23:56 ltt systemd: Failed to parse PID from file /run/sm-client.pid: Invalid argument
Oct 24 17:23:56 ltt systemd: Started Sendmail Mail Transport Client.
Oct 24 17:32:20 ltt kernel: sdb: sdb1 sdb2 sdb3
Oct 24 17:32:20 ltt kernel: sdb: sdb1 sdb2 sdb3
Oct 24 17:33:35 ltt kernel: sdb: sdb1 sdb2 sdb3

gdisk 查看分区信息

[root@ltt ~]$gdisk -l /dev/sdb 

同样的方法可以对GPT进行磁盘格式化

MBR与GPT的区别:

GPT和MBR是不同的分区表类型。使用MBR分区表的硬盘最多只能划分4个主分区磁盘,并且MBR最大仅支持2TB的硬盘。如果需要分区的主分区超过2TB了,则需要使用GPT分区表类型,此分区表类型不受分区个数、硬盘大小的限制。

6、格式化Mkfs

mkfs格式化盘,实质创建文件系统

使用mkfs /dev/sdb1 格式化sdb1分区

[root@ltt ~]$mkfs.ext2 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成 

注意: mkfs. 按table键自动补全 可以查询到支持的文件系统类型。

[root@ltt ~]$mkfs.
mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs  

7、磁盘挂载Mount

mount 临时挂载 重启失效

参数:

​ -a:挂载/etc/fstab配置文件中指定的文件系统。
​ -r:以只读方式挂载文件系统。
​ -w:以可读/写模式挂载文件系统。
​ -t fstype:指定被挂载的文件系统类型为fstype。
​ -o mount_options:在命令行中指定挂载选项。

步骤:

1.创建目录

2.将分区挂载到创建的目录上

3.lsblk 命令查看是否挂载成功

[root@ltt ~]$mkdir  /data1 /data2 data3 data4 data5
[root@ltt ~]$ls
=2               data4      hostname.txt              oldboy          oldboy4.txt  oldboy9.txt     rpmtree-0.3.tgz  test         ts.txt
anaconda-ks.cfg  data5      log_2021-10-09-15:57.bak  oldboy1.tar.gz  oldboy5.txt  oldboy.tar      server.txt       testboy.zip  ZMY
a.txt            err.txt    log_2021-10-09-16:14.bak  oldboy1.txt     oldboy6.txt  oldboy.tar.bz2  sleep.sh         test.sh      zmy1
b.txt            etc1       ls.txt                    oldboy2.txt     oldboy7.txt  oldboy.tar.gz   sort.txt         test.txt     zmysh
data3            file1.txt  ltt                       oldboy3.txt     oldboy8.txt  rpmtree         tar.gz           tmp
[root@ltt ~]$mount -t ext4 /dev/sdb1 /data1/
[root@ltt ~]$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   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0  100M  0 part /data1
├─sdb2            8:18   0    5G  0 part 
└─sdb3            8:19   0 14.9G  0 part 
sdc               8:32   0    3T  0 disk 
sr0              11:0    1  4.4G  0 rom  

fstab 被损坏的情况下,让只读文件系统可写(正常情况下不使用)

mount -o  rw ,remount/

注意: 最好不要跟文件系统类型 因为会默认识别。尽量使用空目录进行挂载。在查看目录大小的时候 应该使用du -sh 而不是 ls -ldh

unmount卸载

参数:

-a:卸载/etc/mtab文件中记录的所有文件系统。
-t fstype:只卸载fstype类型的文件系统。

用法:umount /media

umount -t /dev/sdb1 /挂载目录

分区标识(uuid或设备名) 挂载点 文件类型 挂载参数 不检查 不备份

UUID=299d8a18-6e59-463d-84f9-bcfbf3165a00 /boot xfs defaults 0 0

8、永久挂载

1. 要挂载的设备或伪文件系统:设备名称,LABEL,UUID,伪文件系统名称

2. 挂载点(扩展为swap)

3.文件系统类型(auto 寻找默认的),

  普通设备挂载:ext#/xfs 等文件系统类型

  交换分区 swap:swap

  网络挂载地址 linux之间:nfs,windos挂载:cifs

  光盘 iso9660,文件 cifs

4. 挂载选项:defaults 有需要的功能可以添加,不能为空

5. 转储频率: 0:不做备份 1:每天转储 2:每隔一天转储

6. 开机时自检(非0),自检次序:(如果开机系统自检不过,就无法正常开机)

0:不自检 1:最先自检,一般为/ 2...:数越小优先级最大

例:将上面的使用mount挂载的我文件sdb1 在fstab里挂载

UUID="132c0ee3-0d77-4be5-9ba3-f5bb6b22e6b2" /data1    ext4     defaults        0 0
UUID="56d38982-09eb-46ee-be3b-e1199e5a0fa7" /data2    ext4     defaults         0 0

配置etc/fstab

1.查询分区uid

blkid  /dev/sdb1

2.查询分区uid并写到etc/fstab配置文件中

[root@ltt ~]$blkid  /dev/sdb1 |awk ' {print $2}' >>/etc/fstab

3.配置好以后不需要重启 使用mount -a //读取fstab配置文件信息

在这里插入图片描述

9、虚拟磁盘SWAP

概念:分区一般指定虚拟内存的大小为实际内存的1-1.5倍。如果实际内存超过8GB,可以直接划分16GB给虚拟内存即可,如果虚拟内存不够用的情况下,需要增加一个虚拟磁盘,由于不能给原有的磁盘重新分区,所以可以选择新建。

1.创建swapfile

[root@ltt ~]$dd if=/dev/zero of=/opt/swapfile  bs=40k count=102400

2.格式化swap分区

[root@ltt ~]$mkswap /opt/swapfile 
正在设置交换空间版本 1,大小 = 4095996 KiB
无标签,UUID=4e8a70d7-0524-4cad-a491-a73a84ddbe63

3.检查当前swap分区情况

[root@ltt ~]$free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         241         126          11        3563        3415
Swap:          2047           0        2047

发现我们创建的swap分区每天生效,接下来就需要启动虚拟磁盘。

4.启动虚拟磁盘,并检查

//启动swapflie时,会提示权限过高 按照提示修改权限,手动输入路径不要按table键。
[root@ltt ~]$swapon /opt/swapfile 
swapon: /opt/swapfile:不安全的权限 0644,建议使用 0600。
[root@ltt ~]$swapon /opt/swapfile
swapon: /opt/swapfile:不安全的权限 0644,建议使用 0600。
swapon: /opt/swapfile:swapon 失败: 设备或资源忙

提示的信息不用管,再次使用free-m查看swap分区信息。

[root@ltt ~]$free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         244         122          11        3564        3412
Swap:          6047           0        6047

5.关闭虚拟磁盘,并检查

[root@ltt ~]$free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         244         122          11        3564        3412
Swap:          6047           0        6047
[root@ltt ~]$swapoff /opt/swapfile 
[root@ltt ~]$free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         242         125          11        3564   

提示:可以看到恢复到原来分区的信息了。

6.创建swap分区并且持久化使用

// 修改分区
[root@ltt ~]$fdisk /dev/sdb
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x632a6e7d

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      206847      102400   83  Linux
/dev/sdb2          206848    10692607     5242880   83  Linux
/dev/sdb3        10692608    41943039    15625216   82  Linux swap / Solaris

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。

查看日志信息

[root@ltt ~]$tail /var/log/messages
Oct 24 21:30:19 ltt systemd-logind: New session 6 of user root.
Oct 24 21:31:02 ltt systemd: Can't open PID file /run/sendmail.pid (yet?) after start: No such file or directory
Oct 24 21:31:02 ltt systemd: Started Sendmail Mail Transport Agent.
Oct 24 21:31:02 ltt systemd: Starting Sendmail Mail Transport Client...
Oct 24 21:32:02 ltt systemd: Failed to parse PID from file /run/sm-client.pid: Invalid argument
Oct 24 21:32:02 ltt systemd: Started Sendmail Mail Transport Client.
Oct 24 21:34:04 ltt systemd-logind: Removed session 2.
Oct 24 21:42:01 ltt kernel: Adding 4095996k swap on /opt/swapfile.  Priority:-3 extents:2 across:5957548k FS
Oct 24 21:56:42 ltt systemd: Started Session 7 of user root.
Oct 24 21:56:42 ltt systemd-logind: New session 7 of user root.

查看这个文件的信息 cat /proc/partitions

[root@ltt ~]$cat  /proc/partitions 
major minor  #blocks  name

   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
  11        0    4601856 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1
   8       16   20971520 sdb
   8       17     102400 sdb1
   8       18    5242880 sdb2
   8       19   15625216 sdb3   //表示已经被识别了
   8       32 3145728000 sdc

格式化swap分区

mkswap /dev/sdb3
正在设置交换空间版本 1,大小 = 15625212 KiB
无标签,UUID=b7a924e8-6f41-4423-a190-68d82da4c11a
[root@ltt ~]$swapon -s
文件名				类型		大小	已用	权限
/dev/dm-1                              	partition	2097148	0	-2
/dev/sdb3                              	partition	15625212	

将swap分区信息写入到etc/fstab配置文件中

[root@ltt ~]$blkid  /dev/sdb3 |awk '{print $2}'>>/etc/fstab 
[root@ltt ~]$vim /etc/fstab 
UUID="b7a924e8-6f41-4423-a190-68d82da4c11a" /data3    ext4      defaults      0  0

验证是否创建成功

root@ltt ~]$mount -a //刷新分区信息 
root@ltt ~]$swapon  /dev/sdb3
[root@ltt ~]$free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         256         123          11        3552        3401
Swap:         17306           0       17306
[root@ltt ~]$free -mh
              total        used        free      shared  buff/cache   available
Mem:           3.8G        256M        123M         11M        3.5G        3.3G
Swap:           16G          0B         16G

10、生成磁盘故障案例

Inode被占满,导致磁盘有可用的剩余空间也无法使用

Block现在线上正在运行Nginx服务,Nginx产生的日志已经达到了20个G,磁盘眼看就要满了,如果不要重启的方式你还有其他的方法吗?

//  是会删除文件,但不会释放。
rm -rf access.log
//  正确做法如下,清空文件即可释放文件内容
>.access.log

11、总结

查看分区:

  • fdisk -l
  • gdisk-l
  • lsblk

创建分区:fdisk(MBR)、gdisk(GPT)

同步分区:partprobe

创建文件系统(格式化):mkfs .etx4/xfs、mkfs -t etx4/xfs、mkswap

要求分区类型为82

swapon 开启 swapoff 关闭

挂载:

临时挂载: mount

永久挂载: /etc/fstab

建议使用blkid 查看设备uuid ,使用uuid挂载

卸载 umount

12、为什么要挂载?

因为Linux系统将所有的硬件设备都当做文件来处理,当使用光驱等硬件设备时,就必须将其挂载到系统中,只有这样Linux才能识别。
也就是所谓的Linux系统“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。
当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。
如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。
挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。
纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。
根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设的的一些基本信息(比如容量)。
总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

批注:简言之,linux读取文件需要从根目录出发,外部设备不在根目录下,所以无法访问,通过挂载,就可以让外部设备加入到根目录结构中,就能被访问了。

这篇关于Linux磁盘及文件管理系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!