二、对磁盘的操作
Linux 磁盘与磁盘分区 - sparkdev - 博客园 (cnblogs.com)
磁盘设备在 Linux 下的表示方法
在 Linux 系统中磁盘设备文件的命名规则为: 主设备号 + 次设备号 + 磁盘分区号 对于目前常见的磁盘,一般表示为: sd[a-z]x 主设备号代表设备的类型,相同的主设备号表示同类型的设备。当前常见磁盘的主设备号为 sd。 次设备号代表同类设备中的序号,用 “a-z” 表示。比如 /dev/sda 表示第一块磁盘,/dev/sdb 表示第二块磁盘。 x 表示磁盘分区编号。在每块磁盘上可能会划分多个分区,针对每个分区,Linux 用 /dev/sdbx 表示,这里的 x 表示第二块磁盘的第 x 个分区。
如下图所示:
该系统中一共有四块磁盘 /dev/sda,/dev/sdb,/dev/sdc 和 /dev/sdd。其中的 /dev/sda 上创建了三个分区,分别是 /dev/sda1,/dev/sda2,/dev/sda5;/dev/sdb 上只有一个分区 /dev/sdb1。而 /dev/sdc 和 /dev/sdd 则尚未分区(也肯能是只有一个分区,分区的名称和磁盘的名称相同)。
磁盘分区
创建磁盘分区大概有下面几个目的:
- 提升数据的安全性(一个分区的数据损坏不会影响其他分区的数据)
- 支持安装多个操作系统
- 多个小分区对比一个大分区会有性能提升
- 更好的组织数据
本文以常见的 MBR 分区为例介绍磁盘分区中的一些常见概念。MBR 磁盘的分区由主分区、扩展分区和逻辑分区组成。在一块磁盘上,主分区的最大个数是 4,其中扩展分区也是一个主分区,并且最多只能有一个扩展分区,但可以在扩展分区上创建多个逻辑分区。因此主分区(包括扩展分区)的范围是 1-4,逻辑分区从 5 开始。对于逻辑分区,Linux 规定它们必须建立在扩展分区上,而不是建立在主分区上。 主分区的作用是用来启动操作系统的,主要存放操作系统的启动或引导程序,因此建议操作系统的引导程序都放在主分区,比如 Linux 的 /boot 分区,最好放在主分区上:
扩展分区只不过是逻辑分区的 “容器”。实际上只有主分区和逻辑分区是用来进行数据存储的,因而可以将数据集中存放在磁盘的逻辑分区中。 我们可以通过 fdisk 命令来查看磁盘分区的信息:
$ sudo fdisk -l /dev/sda
输出中的前几行是磁盘的基本信息,比如总大小为 80G,一共有多少个扇区(sector),每个扇区的大小等等。红框中的则是我们比较关注的分区信息: 第一列 Device 显示了磁盘分区对应的设备文件名。 第二列 Boot 显示是否为引导分区,上图中的 /dev/sda1 就是引导分区。 第三列 Start 表示磁盘分区的起始位置。 第四列 End 表示磁盘分区的结束位置。 第五列 Sectors 表示分区占用的扇区数目。 第六列 Size 显示分区的大小。 第七列和第八列显示的内容相同,分别是数值 ID 及其文字描述。 Id 列显示了磁盘分区对应的 ID,根据分区的不同,分区对应的 ID 号也不相同。Linux 下用 83 表示主分区和逻辑分区,5 表示扩展分区,8e 表示 LVM 分区,82 表示交换分区,7 表示 NTFS 分区。 上图中的信息表明:/dev/sda1 是一个主分区并且被用作引导分区;/dev/sda2 是扩展分区,其中只有一个逻辑分区,即 /dev/sda5,这点可以通过两个分区相同的大小证明。
利用fdisk可以划分磁盘分区:详见
Linux 磁盘与磁盘分区 - sparkdev - 博客园 (cnblogs.com)
挂载
linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。 注意:1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
fdisk命令
fdisk -l
mount命令
mount [-t vfstype] [-o options] device dir
mount /dev/sdc1 /mnt/dataIO
1、-t vfstype 指定文件系统的类型,通常不必指定,mount 会自动选择正确的类型。
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
2、-o options 主要用来描述设备或档案的挂接方式。
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
3、device 要挂接(mount)的设备。
4、dir设备在系统上的挂接点(mount point)。
开机自动挂载
查看此文件可知,每行定义一个要挂载的文件系统;
其每行的格式如下:
要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序
UUID=6efb8a23-bae1-427c-ab10-3caca95250b1 /boot xfs defaults 0 0
要挂载的设备或伪文件系统:设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)
挂载点:指定的文件夹
挂载选项:defaults
转储频率:
0:不做备份
1:每天转储
2:每隔一天转储
自检次序:
0:不自检
1:首先自检;一般只有rootfs才用1;
umount
umount DEVICE
umount MOUNT_POINT
fuser -v MOUNT_POINT
fuser -km MOUNT_POINT
磁盘使用情况与问题排查
df 命令
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_ioserverssd-lv_root 50G 41G 5.9G 88% /
tmpfs 16G 0 16G 0% /dev/shm
/dev/sda1 485M 40M 420M 9% /boot
/dev/mapper/vg_ioserverssd-lv_home 437G 403G 12G 98% /home.bak
/dev/sdb1 110G 20G 85G 19% /SSD
/dev/sdc1 2.0T 1.5T 435G 78% /test
StorCloud:/public 73T 65T 8.4T 89% /public
df test
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 29640780 4320600 23814492 16% /
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda6 1884160 261964 1622196 14% /
udev 212748 560 212188 1% /dev
tmpfs 216392 477 215915 1% /run
none 216392 3 216389 1% /run/lock
none 216392 8 216384 1% /run/shm
du命令
du 和 df 算是一对同门师兄弟,du 侧重在文件夹和文件的磁盘占用方面,而 df 则侧重在文件系统级别的磁盘占用方面。
最常用的用法,当然就是查看当前所在文件夹的总磁盘占用量了。
[roc@roclinux ruanjian]$ du -sh .
51M
[roc@roclinux ruanjian]$ du -sh *
3.4M curl-7.34.0.tar.gz
41M soft
6.8M wordpress-4.4.1.tar.gz
[roc@roclinux ruanjian]$ du -ch *.tar.gz
3.4M curl-7.34.0.tar.gz
6.8M wordpress-4.4.1.tar.gz
11M 总用量
用 --max-depth 选项控制深度
[roc@roclinux movies]$ du --max-depth=0 -h .
5.2G
[roc@roclinux movies]$ du --max-depth=1 -h .
2.7G ./China
2.5G ./USA
5.2G .
[roc@roclinux movies]$ du --max-depth=2 -h .
1.4G ./China/2017
1.3G ./China/2016
2.7G ./China
1.2G ./USA/2017
1.3G ./USA/2016
2.5G ./USA
5.2G .
默认情况下,du 命令只会关心文件夹,输出的都是文件夹的空间使用量,而不会关注单个文件。
通过-a 选项让 du 输出包括文件夹和文件在内的完整统计信息
[roc@roclinux ruanjian]$ du -h .
41M ./soft
51M .
[roc@roclinux ruanjian]$ du -ah .
6.8M ./wordpress-4.4.1.tar.gz
3.4M ./curl-7.34.0.tar.gz
980K ./soft/redis-2.6.16.tar.gz
40M ./soft/go1.1.2.Linux-amd64.tar.gz
41M ./soft
51M .
什么文件占满了我的磁盘
磁盘被占满,是 Linux 工程师经常遇到的问题,如果能够熟练使用 du 和 sort 形成组合拳,那么找到元凶并非难事。
#只想看当前文件夹下第一级的大小排序
[roc@roclinux ruanjian]$ du -sh *|sort -nr
41M soft
6.8M wordpress-4.4.1.tar.gz
3.4M curl-7.34.0.tar.gz
#想看当前文件夹和其子文件夹下的大排序
[roc@roclinux ruanjian]$ du -ah .|sort -hr
51M .
41M ./soft
40M ./soft/go1.1.2.Linux-amd64.tar.gz
6.8M ./wordpress-4.4.1.tar.gz
3.4M ./curl-7.34.0.tar.gz
980K ./soft/redis-2.6.16.tar.gz
这里补充一个 sort 的知识点,那就是-h 选项和-n 选项的区别:
-n 选项,按数值进行比较,只会傻傻地比较数字,它会认为 98 K大于 2G。-h 选项,会更加聪明,先优先比较单位(G>M>K),然后再对数值进行比较。
磁盘爆了的排查方式
1.df -h
2.df -i
3.du -ah .
|