Linux 笔记 - 第六章 Linux 磁盘管理
一、前言
1.1 硬盘
硬盘一般分为 IDE 硬盘、SCSI 硬盘和 SATA 硬盘。在 Linux 中,IDE 接口的设备被称为 hd,SCSI 和 SATA 接口的设备则被称为 sd。第一块 硬盘被称作 sda,第2块被称作 sdb,以此类推。Linux 规定,一块硬盘上只能存在 4 个主分区,分别被命名为 sda1、sda2、sda3 和 sda4。逻辑分区则从 5 开始标识,每多一个逻辑分区,就在末尾的分区号上加 1。逻辑分区理论上没有数量限制。正是由于 Linux 系统中最多只能创建 4 个主分区,所以当你想多创建几个分区时,那么就应该在创建完第 3 个分区后,创建第四个分区时选择扩展分区,然后,在扩展分区中,再创建逻辑分区,扩展分区并不是真正的分区,而只是概念上的分区,逻辑分区才是实际的分区,且一块硬盘上最多只能创建一个扩展分区,逻辑分区理论上没有数量限制。
一般来说,每个系统都需要一个主分区来引导。每个分区中存放着引导整个系统所必须的程序参数。在 Windows 环境中常说的 C 盘就是一个主分区,它是硬盘的第一个分区,在 Linux 下被称为 sda1。Windows 中的 D、E、F 等属于逻辑分区,对应于 Linux 下的 sda5、sda6、sda7……。操作系统主体可以安装在主分区,也可以安装在逻辑分区,但引导程序必须安装在主分区内。
综上,硬盘分区表 64byte,共分为4组记录区,每一组记录区记录了该区段的起始与结束的磁柱号码,这四组记录就是主要(primary)分区或扩展(extended)分区,所以主要分区加上扩展分区最多只能有四个。由于操作系统(包括 Linux、Windows)的限制,扩展分区最多只能有一个,所以一块磁盘最多可以分为 3 个主分区加 1 个扩展分区,扩展分区的目的是使用额外的扇区来记录磁盘分割信息,扩展分区本身不能格式化。逻辑(logical)分区是由扩展分区持续切割出来的,作为数据存储的分区是主要分区和逻辑分区。逻辑分区的数量依操作系统不同而不同,在linux中,IDE硬盘最多有 59 个逻辑分区(/dev/hda5到/dev/hda63),SATA硬盘则最多有11个逻辑分区(/dev/sda5 到 /dev/sda15)。
1.2 文件系统
Windows 系统格式化硬盘时会指定格式为 FAT32 或者 NTFS,而 Linux 常见的文件系统格式有 Ext2、Ext3 或者 Ext4 等。Ext3 比 Ext2 多了日志功能,可以跟踪记录文件系统的变化,并将变化内容写入日志。当系统崩溃之后,就可以利用日志恢复文件系统,在很大程度上避免了数据的丢失。当系统崩溃之后,就可以利用日志恢复文件系统,在很大程度上避免了数据的丢失。Ext4 支持的最大文件系统容量和单个最大文件大小比 Ext3 都要大。ReiserFS 是 SuSE 默认的文件系统。swap 是交换分区,可以理解为虚拟内存。实际内存不够时,操作系统从内存中取出一部分暂时不用的数据,放在交换分区中。Windows 不会为 swap 单独划分一个分区,而是使用分页文件实现相同的功能。如何将 NTFS 格式的分区挂载到 Linux 下呢,我们可以通过安装 ntfs-3g 软件包来解决这个问题。
1.3 设备文件
/dev 是所有设备文件所在的目录,设备文件格式为 /dev/xxyN。其中,xx:标明分区所在设备的类型,如 hd(IDE 硬盘)或 sd(SCSI 硬盘);y:标明分区所在的设备,如 /dev/hda(第一个 IDE 硬盘)或 /dev/sdb(第二个 SCSI 硬盘);N:这个数字代表分区,前四个分区(主分区或扩展分区)是用数字从1排列到4,逻辑分区从5开始。
二、查看磁盘或者目录的容量
2.1 查看磁盘的容量命令 df -h
df - report file system disk space usage,可以查看已挂载磁盘的总容量、使用容量和剩余容量等。不加选项时,默认单位为 KB。主要选项有 -i、-h、-T、-k 和 -m。其中 -i 表示查看 inodes 使用状况;-T 可以查看文件系统类型;-h 最常用,表示使用合适的单位显示容量,系统会自动判断;-k 和 -m 分别表示以 K 和 M 为单位显示容量。常用格式为: df -h [Filesystem],如果不添加具体的 Filesystem 名称,那么会列出系统所有的分区 。
[root@ryan ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.6G 16G 9% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 35M 145M 20% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt/cdrom
第1列为分区的名字,第2列为该分区的总容量,第3列为已使用容量,第4列为剩余容量,第5列为已使用容量的百分比,第6列为挂载点。
[root@ryan ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 19G 1.6G 16G 9% /
tmpfs tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 ext4 190M 35M 145M 20% /boot
/dev/sr0 iso9660 3.7G 3.7G 0 100% /mnt/cdrom
其中,/dev/shm 为内存挂载点,tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,tmpfs 可以使用您的内存或 swap 分区来存储文件。iso9660 为光盘的文件系统类型。
2.2 查看目录或文件所占磁盘空间的大小命令 du -sh
du - estimate file space usage,用于查看目录或文件所占磁盘空间的大小,默认单位为 KB。格式为 du [-abckmsh] [文件或者目录名],主要选项有 -a、-b、-k、-m、-h、-c、-s。-a 表示列出全部文件和目录的大小,否则只会列出目录(包含子目录)的大小,而不包含文件的大小;-b、-k、-m 分别表示以 byte、KB、MB为单位输出;-h 表示系统自动调节单位;-c 表示最后加总;-s 表示只列出总和。常用格式为 du -sh filename。
[root@ryan ~]# du -sh /opt
1.1G /opt
综上,统计磁盘分区(即文件系统)的容量大小命令为:df -h;统计文件的实际内容大小命令为:ls -lh;统计目录或者文件占用磁盘空间的大小命令为:du -sh。
三、磁盘的分区
新的磁盘在使用之前需要先分区,语法格式为: fdisk [-l ] [设备名称],但是 fdisk 只能划分小于 2TB 的分区,如果要划分大于 2TB 的分区,则需要使用 GPT 分区格式,可利用 parted 命令来完成分区。不管使用哪种分区程序,我们在 Linux 上给新硬盘建立分区时都要遵循以下的顺序:建立主分区 → 建立扩展分区 → 建立逻辑分区 → 指定文件系统类型,格式化所有分区 → 挂载。
[root@ryan ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008da69
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 157 1048576 82 Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3 157 2611 19717120 83 Linux
[root@ryan ~]# fdisk -l /dev/sda2
Disk /dev/sda2: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
进入分区模式:
按 m 进入分区菜单:
上面常用的几个菜单项:
d 删除一个分区;
l 打印分区类型对应的 ID 号;
n 添加一个分区;
p 打印分区表;
q 不保存退出;
w 保存退出。
四、磁盘格式化
磁盘分区好之后,还不能使用,需要对每一个分区进行格式化,其实就是安装文件系统。如 Windows 下有 Fat32 和 NTFS,CentOS 下有 ext2、ext3、ext4 等。
通过查看 /etc/filesystems 文件列出当前系统所支持的所有文件系统类型:
[root@ryan ~]# cat /etc/filesystems
ext4
ext3
ext2
nodev proc
nodev devpts
iso9660
vfat
hfs
hfsplus
可以使用 mke2fs、mkfs.ext2、mkfs.ext3 和 mkfs.ext4 等命令,对分区进行格式话,建议使用 mke2fs 命令,因为它的选项比较多,可以分成 ext2、ext3、ext4 的格式。常用选项有:-b 指定分区时设定每个数据区块占用的空间大小,默认为 4096 bytes,即 4K;-L 预设该分区的标签(Label);-t 用来指定文件系统的类型,如 ext2、ext3、ext4。如 mke2fs -t ext4 /dev/sdb5
命令 e2label 用于查看或修改分区的标签。
五、挂载/卸载磁盘
磁盘分区,然后格式化,此时磁盘已经是一个块设备文件,类型为 b,但是现在还不能直接在该磁盘分区中写入数据,而是先建立一个挂载点,挂载点是以目录的形式出现的。如果挂载点不存在,需要先手工创建挂载点,并且挂载点(目录)下必须是个空目录。如果不是空目录,一旦挂在了新的分区,该目录下以前的数据就看不到了,除非卸载该分区。
5.1 挂载磁盘
mount - mount a filesystem,挂载一个文件系统,如果不加任何选项,直接运行 mount 命令,则显示系统所有分区,挂载点,分区文件系统类型等信息:
[root@ryan ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sr0 on /mnt/cdrom type iso9660 (ro)
常用选项还有 -a、-t 和 -o。-a 会挂载 /etc/fstab 中出现的所有磁盘分区;-t 选项用来指定挂载的分区类型,默认不指定会自动识别;-o 选项用来指定挂载的分区有哪些特性,即 /etc/fstab 配置文件中第 4 列的信息。如
[root@ryan ~]# mount /dev/sdb5 /newfolder
表示将分区 /dev/sdb5 挂载到 /newfolder 下,通常第一个参数可以是文件系统,LABEL 或 UUID。
5.2 /etc/fstab 配置文件
此配置文件中显示了系统启动时需要挂载的各个分区。
[root@ryan ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 12 07:40:10 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=3974d6b2-aa5c-4a43-a296-bf3dc70654e9 / ext4 defaults 1 1
UUID=49d563ca-1c80-47bd-8721-ac2323568655 /boot ext4 defaults 1 2
UUID=796cdd24-f311-407c-9fa8-e272e5b5fd66 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
第1列是分区的表示,可以写分区的 Label、分区的 UUID、也可以写分区名(/dev/sda1);第2列是挂载点;第3列分区的格式;第4列是 mount 的一些挂载参数,一般情况下,直接写 defaults 即可;第5列的数字表示是否被 dump 备份,1表示备份,0表示不备份;第6列的数字表示开机时是否自检磁盘,1和2都表示检测,1比2优先级高,0表示不检测。
也可以将需要挂载的命令写入 /etc/rc.local(此为软链接,实际指向 /etc/rc.d/rc.local 文件),系统启动最后会执行这个文件中的命令,这也就是让一些操作行为随系统启动而自动执行。
5.3 命令 blkid
blkid - command-line utility to locate/print block device attributes,获取分区的唯一标识 UUID,它是真正的唯一标志符,格式为:blkid [filesystem]。
[root@ryan ~]# blkid
/dev/sda3: UUID="3974d6b2-aa5c-4a43-a296-bf3dc70654e9" TYPE="ext4"
/dev/sda1: UUID="49d563ca-1c80-47bd-8721-ac2323568655" TYPE="ext4"
/dev/sda2: UUID="796cdd24-f311-407c-9fa8-e272e5b5fd66" TYPE="swap"
5.4 卸载磁盘
umount - unmount file systems,卸载文件系统,这个命令后可以跟挂载点,也可以跟分区名(如 /dev/hdb1),但是不可以跟 LABEL 和 UUID。如果遇到不能卸载的情况,可以跳转到其他目录,或者使用 umount -l 选项,表示延迟卸载。
六、关于 swap
swap 用来做虚拟内存,虽然 swap 无法代替物理内存,但不可缺少。swap 分区的作用是:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 swap 空间中,等到那些程序要运行时,再从 swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行 swap 交换。查看当前系统中是否已经启用 swap 分区:cat /proc/swaps。
通常建立 swap 有两种方法:1.建立 swap 分区;2.创建 swap 交换文件。运行速度:物理内存 > swap 分区 > swap 文件。当你的数据盘已经装了很多内容,不方便重新规划的话,也只好使用第二种方法,创建 swap 文件了。如果你只有一块磁盘,而且磁盘已经装了很多内容,所以就不可能再选择对磁盘格式化来给磁盘分区了,而是选择创建 swap 文件的方法。基本步骤是:建立 swapfile → 格式化为 swap 格式 → 启用该虚拟内存。使用 free 命令来查看内存的使用情况,包括物理内存和虚拟内存, -m 选项表示以 MB 为单位显示。
[root@ryan ~]# free -m
total used free shared buffers cached
Mem: 1861 200 1660 0 9 59
-/+ buffers/cache: 131 1730
Swap: 1023 0 1023
Linux 笔记 - 第六章 Linux 磁盘管理的更多相关文章
- Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划
博客地址:http://www.moonxy.com 一.前言 Linux 下的的防火墙功能是非常丰富的,作为 Linux 系统工程师有必要了解一下.防火墙一般分为硬件防火墙和软件防火墙.但是,不管是 ...
- Linux 笔记 - 第十七章 Linux LVM 逻辑卷管理器
一.前言 在实际生产中,有时会遇到磁盘分区空间不足的情况,这时候就需要对磁盘进行扩容,普通情况下需要新加一块磁盘,重分区.格式化.数据复制.卸载旧分区.挂载新分区等繁琐的步骤,而且有可能造成数据的丢失 ...
- Linux 笔记 - 第五章 Linux 用户与用户组管理
博客地址:http://www.moonxy.com Linux 是一个多用户的操作系统,在日常的使用中,从安全角度考虑,应该尽量避免直接使用 root 用户登录,而使用普通用户. 1. 关于用户 u ...
- Linux 笔记 - 第十三章 Linux 系统日常管理之(三)Linux 系统日志和服务
博客地址:http://www.moonxy.com 一.前言 日志文件记录了系统每天发生的各种各样的事情,比如监测系统状况.排查问题等.作为系统运维人员可以通过日志来检查错误发生的原因,或者受到攻击 ...
- Linux 笔记 - 第十三章 Linux 系统日常管理之(一)系统状态监控
博客地址:http://www.moonxy.com 一.前言 如果你是一名 Linux 运维人员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.系统运行状态主要包括:系统负载.内存状态 ...
- Linux 笔记 - 第四章 Linux 文件和目录管理
博客地址:http://www.moonxy.com 1. 绝对路径和相对路径 绝对路径:由根目录 "/" 写起的.如:/usr/local/mysql 相对路径:不是由根目录 & ...
- Linux 笔记 - 第十三章 Linux 系统日常管理之(四)Linux 中 rsync 工具和网络配置
博客地址:http://www.moonxy.com 一.前言 rsync 命令是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,可以理解为 remote sync(远程同步) ...
- 鸟哥的Linux私房菜笔记第六章(二)
文件内容查询 直接查询文件内容 查阅一个文件的内容可以使用指令cat/tac/nl. # [cat|tac|nl] 文件 区别: 1.cat是直接把文件内容输出到屏幕上,并且从第一行开始输出到末行 2 ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...
随机推荐
- Java 在spring cloud中使用Redis,spring boot同样适用
1.本地安装redis服务,官网下载. 2.在开发中要使用redis,首先要启动本地redis服务,启动后页面如下: 3.在spring boot项目pom.xml文件中添加Redis需要的依赖包,可 ...
- Mysql5.6对时间的处理精度问题
在业务处理需要使用new Date()来更新时间类型的字段时,数据库会对时间类型进行四舍五入处理,如果new Date()的更新时间与原时间间隔太短,数据库进行四舍五入之后,认为值没有变化,从而不更新 ...
- 常用高效 Java 工具类总结
一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...
- restapi(5)- rest-mongo 应用实例:分布式图片管理系统之一,rest 服务
最近有同事提起想把网页上的图片存在MongoDB里,我十分赞同.比起把图片以文件形式存放在硬盘子目录的方式,MongoDB有太多的优势.首先,MongoDB是分布式数据库,图片可以跨服务器存储.在一个 ...
- bilibili弹幕爬取与比对分析
最近受人之托研究了下b站的数据爬取做个小工具,最后朋友说不需要了,本着开源共享的原则,将研究成果与大家分享一波,话不多说直接上干货 需求分析 给定up主uid和用户uid,爬取用户在该up主所有视频中 ...
- The used SELECT statements have a different number of columns???
今天我们组就我一个人留守在这里修复bug了,有点小悲伤啊,他们都问我能不能hold得住啊,我当然能hold得住啊: 在看一个入库的存储过程中,在数据库运行的时候是没问题的,项目已启动,进行入库操作就是 ...
- Redis学习总结(三)--Redis持久化
Redis 是将数据存储在内存中的,如果出现断电或系统故障的时候数据就会存在丢失的现象,Redis通过将数据持久化到硬盘中来避免这个问题的出现,我们今天就来学习下 Redis 持久化. Redis 持 ...
- MSIL实用指南-生成内部类
生成内部类用TypeBuilder的DefineNestedType方法,得到另一个TypeBuilder.内部类的可访问性都是TypeAttributes的“Nested”开头一些成员.实例代码:y ...
- Delphi - cxGrid连接Oracle数据库
cxGrid连接Oracle数据库 WinFrm窗体中需要添加OraSession .OraQuery和 OraDataSource控件. OraSession中配置数据库连接参数: OraQuery ...
- 悲观锁 vs 乐观锁 vs Redis
企业面对高并发场景采用的方案. 比如 产品抢购高并发时的超发现象. 1 悲观锁悲观锁 需要数据库本身提供支持(Oracle和MySQL都是支持的).实现细节:当前 数据库事务 读取到产品后, 就将目标 ...