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文件格式",实际上它完全不需要以磁 ...
随机推荐
- HTTP与HTTPS之面试必备
本文主要讲解Http与https的区别,以及https是怎样加密来保证安全的. 首先讲这俩个协议的简单区别: HTTP:超文本传输协议. HTTPS:安全套接字层超文本传输协议HTTP+SSL HTT ...
- egret项目发布为微信小程序
1.更改游戏的缩放模式 因为微信小游戏不支持showAll,如果你使用了showAll模式.可以改成fixedWidth或fixedHeight.在index.html里修改,如下图 但这个又涉及到了 ...
- python 之os模块用法大全
Python的标准库中的os模块包含普遍的操作系统功能.这个模块的作用主要是提供与平台无关的功能.也就是说os模块能够处理平台间的差异问题,使得编写好的程序无需做任何改动就能在另外的平台上运行 这边给 ...
- 关于事务,事务的特性,spring事务的传播特性
1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...
- 为了完成这个功能,我竟然用5行代码制作了一个EXE可执行程序
由于用户访问我们某个网址的路径比较长,最后我们确定了在桌面添加快捷入口的方案,让用户点击快捷入口直接进入直接的网址,而且这个快捷入口要带有指定的logo(排除了新建url快捷方式的方案),所以我决定写 ...
- Spring学习之旅(二)--容器
在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建.配置.装配并管理它们的整个生命周期. Spring 容器 Spring 容器 并不是只有一个 ...
- 使用jQuery.extend创建一个简单的选项卡插件
选项卡样式如图,请忽略丑陋的样式,样式可以随意更改 主要是基于jquery的extend扩展出的一个简单的选项卡插件,注意:这里封装的类使用的是es6中的class,所以不兼容ie8等低版本浏览器呦! ...
- 设计模式(C#)——02简单工厂模式
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来.通俗来说,你只关心怎么用,不用关心怎么做 ...
- C++ 并发编程之互斥锁和条件变量的性能比较
介绍 本文以最简单生产者消费者模型,通过运行程序,观察该进程的cpu使用率,来对比使用互斥锁 和 互斥锁+条件变量的性能比较. 本例子的生产者消费者模型,1个生产者,5个消费者. 生产者线程往队列里放 ...
- jQuery实现发送验证码30s倒计时,且刷新页面时有效
在这里讲一讲这个案例的实现思路吧(个人见解)..核心思想:为防止页面刷新时倒计时失效的解决方案是:当每次刷新一次页面时都执行一个函数 即下面讲到的 setStyle() 函数.这个函数会根据当前的 c ...