赞
踩
Linux中磁盘的命名方式与磁盘的接口有关,规则如下:
传统IDE接口硬盘:/dev/hd[a-z]
SCISI接口硬盘:/dev/sd[a-z]
虚拟化硬盘:/dev/vd[a-z]
在设备名称的定义规则如下, 其他的分区可以以此类推
系统的第一块SCSI接口的硬盘名称为/dev/sda
系统的第二块SCSI接口的硬盘名称为/dev/sdb
系统中分区由数字编号表示, 1-4留给主分区使用和扩展分区, 逻辑分区从5开始
//第一块磁盘
/dev/sda
//第一块磁盘的第一个分区
/dev/sda1
//第二块磁盘的第一个分区
/dev/sdb1
在使用新磁盘之前,你必须对其进行分区。MBR(Master Boot Record)和GPT(GUID Partition Table)是在磁盘上存储分区信息的两种不同方式。这些分区信息包含了分区从哪里开始的信息,这样操作系统才知道哪个扇区是属于哪个分区的,以及哪个分区是可以启动的。在磁盘上创建分区时,你必须在MBR和GPT之间做出选择
MBR是Master Boot Record的简称,也就是主引导记录,是位于磁盘最前边的一段引导(Loader)代码,主要用来引导操作系统的加载与启动
特点:
MBR支持最大2TB磁盘,它无法处理大于2TB容量的磁盘
只支持最多4个主分区。若想要更多分区,需要创建扩展分区,并在其中创建逻辑分区
GPT磁盘是指使用GUID分区表的磁盘,GUID磁盘分区表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准
特点:
- GPT对磁盘大小没有限制
- 最多可以创建128个分区
注意:
MBR与GPT之间互相转换会导致数据丢失
使用df命令查看磁盘容量,不加参数以k为单位:
df -i //查看inode使用情况
df -h //以G或者T或者M人性化方式显示
df -T //查看文件类型
//使用df命令查看磁盘,下面分别介绍每列什么含义
[root@guilaixiaobaii ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 38G 946M 37G 3% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.7M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-home 19G 33M 19G 1% /home
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0
使用lsblk查看分区情况:
[root@guilaixiaobai ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─rhel-root 253:0 0 37G 0 lvm /
├─rhel-swap 253:1 0 3.9G 0 lvm [SWAP]
└─rhel-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 3.8G 0 rom
使用du命令查看目录或者文件的容量,不加参数以k为单位:
du -sh opt //人性化输出显示大小
-s:列出总和
-h:人性化显示容量信息
[root@lisuhaoyi ~]# du -sh /root/
分区工具有fdisk和gdisk,当硬盘小于2T的时候我们应该用fdisk来分区,而当硬盘大于2T的时候则应用gdisk来进行分区
//生产分区建议: 如无特殊需求, 直接使用整个磁盘即可, 无需分区
//学习分区建议:1P+1E(3L) 2P+1E(2L) 3P+1E(1L) (仅适用于练习)
[root@guilaixiaobai ~]# fdisk -l 磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000983d7 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 125829119 61864960 8e Linux LVM 磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 .... [root@guilaixiaobai ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 10G 0 disk └─vda1 252:1 0 10G 0 part / vdb 252:16 0 10G 0 disk ├─vdb1 252:17 0 1K 0 part └─vdb5 252:21 0 500M 0 part /common [root@guilaixiaobai ~]# fdisk /dev/sdb Command (m for help): m //输入m列出常用的命令 Command action a toggle a bootable flag //切换分区启动标记 b edit bsd disklabel //编辑sdb磁盘标签 c toggle the dos compatibility flag //切换dos兼容模式 d delete a partition //删除分区 l list known partition types //显示分区类型 m print this menu //显示帮助菜单 n add a new partition //新建分区 o create a new empty DOS partition table //创建新的空白分区表 p print the partition table //显示分区表的信息 q quit without saving changes //不保存退出 s create a new empty Sun disklabel //创建新的Sun磁盘标签 t change a partition's system id //修改分区ID,可以通过l查看id u change display/entry units //修改容量单位,磁柱或扇区 v verify the partition table //检验分区表 w write table to disk and exit //保存退出 x extra functionality (experts only) //拓展功能 //创建主分区 命令(输入 m 获取帮助):n //新建分区 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p //选择主分区 分区号 (1-4,默认 1): //默认回车 起始 扇区 (2048-41943039,默认为 2048): //默认扇区回车 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G //分配5G 分区 1 已设置为 Linux 类型,大小设为 5 GiB //创建扩展分区 命令(输入 m 获取帮助):n //新建分区 Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e //创建扩展分区 分区号 (2-4,默认 2): 起始 扇区 (10487808-41943039,默认为 10487808): 将使用默认值 10487808 Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039): //默认划分所有空间给扩展分区 将使用默认值 41943039 分区 2 已设置为 Extended 类型,大小设为 15 GiB //创建逻辑分区 命令(输入 m 获取帮助):n //新建分区 Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) Select (default p): l //创建逻辑分区 添加逻辑分区 5 起始 扇区 (10489856-41943039,默认为 10489856): 将使用默认值 10489856 Last 扇区, +扇区 or +size{K,M,G} (10489856-41943039,默认为 41943039):+5G //分配100MB空间 分区 5 已设置为 Linux 类型,大小设为 5 GiB //查看分区创建 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xf8e96ee3 设备 Boot Start End Blocks Id System /dev/sdb1 2048 10487807 5242880 83 Linux /dev/sdb2 10487808 41943039 15727616 5 Extended /dev/sdb5 10489856 20975615 5242880 83 Linux 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 //检查磁盘是否是MBR分区方式 [root@guilaixiaobai ~]# fdisk -l |grep "磁盘标签类型" 磁盘标签类型:dos LANG=zh_CN.UTF-8 //切换中文 LANG=en_US.UTF-8 //切换英文 [root@guilaixiaobai ~]# fdisk -l /dev/sdb|grep type Disk label type: dos //安装parted, 刷新内核立即生效,无需重启 [root@guilaixiaobai ~]# yum -y install parted [root@guilaixiaobai ~]# partprobe /dev/sdb
//安装gdisk工具 [root@guilaixiaobai ~]# yum -y install gdisk [root@guilaixiaobai ~]# gdisk /dev/sdb Command (? for help): n //创建新分区 Partition number (1-128, default 1): First sector (34-2097118, default = 2048) or {+-}size{KMGTP}: Last sector (2048-2097118, default = 2097118) or {+-}size{KMGTP}: +500M //分配500M大小 Command (? for help): p //打印查看 Number Start (sector) End (sector) Size Code Name 1 2048 1026047 500.0 MiB 8300 Linux filesystem Command (? for help): w //保存分区 Do you want to proceed? (Y/N): y //确认 OK; writing new GUID partition table (GPT) to /dev/sdb. The operation has completed successfully. //检查磁盘是否是gpt格式 [root@guilaixiaobai /]# fdisk /dev/sdb -l|grep type Disk label type: gpt //安装parted, 刷新内核立即生效,无需重启 [root@guilaixiaobait ~]# yum -y install parted [root@guilaixiaobai~]# partprobe /dev/sdb
使用mkfs命令格式化磁盘,创建文件系统
//mkfs常用的选项有 -b //设定数据区块占用空间大小,目前支持1024、2048、4096 bytes每个块。 -t //用来指定什么类型的文件系统,可以是ext3,ext4, xfs -i //设定inode的大小 -N //设定inode数量,防止Inode数量不够导致磁盘不足 -L //预设该分区的标签label //格式化整个sdb磁盘为ext4文件系统 [root@guilaixiaobai ~]# mkfs.ext4 /dev/sdb1 //也可以使用-t指定方式创建ext4文件系统 [root@guilaixiaobai ~]# mkfs -t ext4 /dev/sdb1 //也可以格式化sdb1分区为xfs文件系统 [root@guilaixiaobai ~]# mkfs.xfs /dev/sdb1 [root@guilaixiaobai ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
注意 :
不要mkfs.ext4 /dev/sdb 不然你的分区会都没了
在上面的内容中讲到了磁盘的分区和格式化, 那么格式化完了后, 如何使用, 这就涉及到了挂载这块磁盘
挂载分区前需要创建挂载点, 挂载点以目录形式出现
如果往挂载点目录写入数据, 实际上会写入到该分区
挂载点建议是空目录, 不是也不影响挂载分区的使用,但是会隐藏原有的文件
命令:mount挂载磁盘,实质为文件系统指定访问入口 mount -t //指定文件系统挂载分区,如ext3,ext4, xfs mount -a //重新读取/etc/fstab配置文件的所有分区 mount -o //指定挂载参数 //fstab被损坏情况下,让只读文件系统可写(正常情况下不使用) [root@guilaixiaobai ~]#mount -o rw,remount / //挂载/dev/sdb1至db1目录 [root@guilaixiaobai ~]# mkdir /db1 [root@guilaixiaobai ~]# mount /dev/sdb1 /db1 [root@guilaixiaobai ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 38G 952M 37G 3% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.7M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/rhel-home 19G 33M 19G 1% /home /dev/sda1 1014M 143M 872M 15% /boot tmpfs 378M 0 378M 0% /run/user/0 /dev/sr0 3.8G 3.8G 0 100% /mnt /dev/sdb1 4.8G 20M 4.6G 1% /db1 //df 有显示就是挂在上了
//使用blkid命令获取各分区的UUID
[root@guilaixiaobai ~]# blkid /dev/sdb1
/dev/sdb1: UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" TYPE="xfs"
//使用UUID挂载磁盘sdb1分区至于db1, 临时挂载
[root@guilaixiaobai ~]# mount UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" /db1
//也可以把下面这行写到/etc/fstab中,永久挂载, 开机自动挂载
[root@guilaixiaobai ~]# tail -1 /etc/fstab
UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /db1 xfs defaults 0 0
//加载fstab配置文件, 同时检测语法是否有错误
[root@guilaixiaobai ~]# mount –a
配置文件介绍:
[root@guilaixiaobai ~]# vim /etc/fstab //分区标识(UUID或设备名) 挂载点 文件类型 挂载参数 不检查 不备份 UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /db1 ext4 defaults 0 0 //挂载参数, 可写fstab配置文件, 也可以mount时使用-o参数指定 参数 参数意义 系统默认值 async 系统每隔一段时间把内存数据写入磁盘中, sync 时时同步内存和磁盘中数据; suid,nosuid 允许/不允许分区有suid属性 suid rw,ro 可以指定文件系统是只读(ro)或可写(rw) rw exec,noexec 允许/不允许可执行文件执行,不要挂载根分区 exec user,nouser 允许/不允许root外的其他用户挂载分区 nouser auto,noauto 开机自动挂载/不自动挂载 auto default 默认文件系统挂载设置 rw, suid, dev, exec, auto, nouser, async //加载所有配置 [root@guilaixiaobai ~]# mount -a
umount -l //强制卸载挂载 //使用站点目录卸载 [root@guilaixiaobai ~]# umount /db1 //使用设备名卸载/dev/sdb1 [root@guilaixiaobai ~]# umount /dev/sdb1 //umount不能卸载的情况 [root@guilaixiaobai db1]# umount /db1 umount: /db1: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1) //如上情况解决办法有两种, 切换至其他目录 或使用'-l'选项强制卸载 [root@guilaixiaobai db1]# umount -l /db1
交换分区SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。
交换分区一般指定虚拟内存的大小为实际内存的1~1.5倍。如果实际内存超过8GB,可以直接划分16GB给虚拟内存即可,如果虚拟内存不够用的情况,须增加一个虚拟磁盘,由于不能给原有的磁盘重新分区,所以可以选择新建。
[root@guilaixiaobai ~]# dd if=/dev/zero of=/opt/newdisk bs=1M count=1024
//if:指定源 一般写/dev/zero
//of:指定目标
//bs:定义块大小
//count:数量
[root@guilaixiaobai opt]# mkswap -f /opt/newdisk
[root@guilaixiaobai ~]# free -m
[root@guilaixiaobai ~]# swapon /opt/newdisk
[root@guilaixiaobai ~]# free -m
[root@guilaixiaobai ~]# swapoff /opt/newdisk
[root@guilaixiaobai ~]# free -m
例子: 给系统新增加一个交换分区(swap) 考试题目:一般是要求新建一个分区,并且把分区作为swap分区使用 查看内存和交换分区的使用情况 # free -m total used free shared buffers cached Mem: 1841 613 1227 16 0 258 -/+ buffers/cache: 354 1486 Swap: 0 0 0 <--- 没有交换分区 fdisk -l /dev/sdb 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux /dev/sdb2 2099200 6293503 2097152 83 Linux <---准备把该分区作为交换分区 新建一个分区,并且把分区类型更改为82 新分区我们在上面的练习已经完成了,所以本例子不用分区,而是需要修改该分区的类型 fdisk /dev/sdb 命令(输入 m 获取帮助):l 列出所有支持的分区类型对应的id 命令(输入 m 获取帮助):t 修改分区id 分区号 (1-5,默认 5):2 修改第2个分区 Hex 代码(输入 L 列出所有代码):82 修改成id为82 已将分区“Linux”的类型更改为“Linux swap / Solaris” 命令(输入 m 获取帮助):p 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux /dev/sdb2 2099200 6293503 2097152 82 Linux swap / Solaris <---修改成功 命令(输入 m 获取帮助):w 强烈建议: 对分区做了修改后都刷新一下 partprobe /dev/sdb 把sdb2格式化为交换分区 mkswap /dev/sdb2 正在设置交换空间版本 1,大小 = 2097148 KiB 无标签,UUID=ba08eb90-2003-44e6-9769-9a9351aebb05 启动交换分区 swapon /dev/sdb2 或者 # swanon -a 启动所有交换分区 查看 swapon -s 文件名 类型 大小 已用 权限 /dev/sdb2 partition 2097148 0 -1 持久化保存交换分区的使用 blkid /dev/sdb2 /dev/sdb2: UUID="ba08eb90-2003-44e6-9769-9a9351aebb05" TYPE="swap" vi /etc/fstab /dev/mapper/rhel-root / xfs defaults 0 0 UUID=cb3299d6-16e0-4644-9686-27907eefb8f3 /boot xfs defaults 0 0 UUID=ba08eb90-2003-44e6-9769-9a9351aebb05 swap swap defaults 0 0
[root@guilaixiaobai ~]# dd if=/dev/zero of=/opt/newdisk bs=1k count=1024 [root@guilaixiaobai ~]# mkfs.ext4 -i 1024 /opt/newdisk [root@guilaixiaobai ~]# mkdir /data [root@guilaixiaobai ~]# mount -t ext4 -o loop /opt/newdisk /data/ //inode被占满 [root@guilaixiaobai ~]# touch {1..20000} touch: cannot touch `19997': No space left on device touch: cannot touch `19998': No space left on device touch: cannot touch `19999': No space left on device touch: cannot touch `20000': No space left on device //inode被占满,剩余block也是无法继续使用 [root@guilaixiaobai ~]# df -i|grep data /opt/newdisk 1024 1024 0 100% /data [root@guilaixiaobai ~]# df -h|grep data /opt/newdisk 891K 34K 806K 5% /data
Block空间即将被占满, 但删除大文件也没有释放空间
假设现在线上正在运行Nginx服务, Nginx产生的日志已经达到了20个G, 磁盘眼看就看沾满了, 请问不重启Nginx的方式如何处理
//是会删除文件, 但Nginx持续占用着文件, 所以空间并不会被释放
rm -f access.log
//正确做法如下, 清空该文件即可释放文件内容
> access.log
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。