Linux磁盘及文件管理系统
2021/10/25 7:09:40
本文主要是介绍Linux磁盘及文件管理系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录:
- Linux磁盘及文件系统管理
- 1、什么是磁盘:
- 2、磁盘运行机理:
- 3、磁盘的分类:
- 4、查看磁盘分区信息命令
- 5、linux-fdisk命令详解
- 6、格式化Mkfs
- 7、磁盘挂载Mount
- 8、永久挂载
- 10、生成磁盘故障案例
- 11、总结
- 12、为什么要挂载?
Linux磁盘及文件系统管理
机械hdd与固态ssd
SSD才有电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,拥有极高的存储性能SSD无查找延迟,存储于读取速度快同时防震抗摔
创建文件系统:
格式化: 低级格式化(分区之前进行,划分磁道)、高级格式化(分区之后对分区)
1、什么是磁盘:
磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写。绝大多数磁盘被永久封存在一个密封的盒子里。
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磁盘及文件管理系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法