df、du、fdisk:Linux磁盘管理三板斧
df 命令可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息,它也可以显示所有文件系统对i节点和磁盘块的使用情况;
du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况,统计目录(或文件)所占磁盘空间的大小;
fdisk 命令 用于磁盘分区;
mkfs 创建文件系统。
1、查看新增硬盘设备
fdisk -l
命令的作用是列出当前系统中所有硬盘设备及其分区的信息。其中 /dev/sda 为原有磁盘设备,/dev/sdb 为新增磁盘设备。
新的硬盘设备还未进行初始化,没有包含有效的分区信息。在Linux系统中,分区和格式化的过程是相对独立的。先分区后创建文件格式。
Device:分区的设备文件名称。
Boot:是否是引导分区,是,则有“*”标识。
Start:该分区在硬盘中的起始位置(柱面数)。
End:该分区在硬盘中的结束位置(柱面数)。
Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节。
Id:分区类型的ID标记号,对于ext3分区为83,LVM分区为8e。
System:分区类型。
2、分区
对磁盘进行分区,以新建可用的分区;
对该分区进行格式化(format),以创建系统可用的文件系统;
若想要仔细一点,则可对刚才新建好的文件系统进行检验;
在Linux系统上,需要创建挂载点(也既是目录),并将它挂载上来。
这个 fdisk 只有root才能执行。此外,请注意,使用的“设备文件名”不要加上数字,因为分区是对“整个硬盘设备”而不是某个分区。
fdisk /dev/sdb #对 sdb 进行操作
对硬盘分区, 使用扇区的方式分区
使用直接给定大小的方式分区
将分区写入磁盘
partprobe /dev/sdb #使操作系统获知新的分区表情况
#partprobe 命令是强制让内核重新找一次分区表,否则系统要重启才能识别到新的分区表。
#因为我们的磁盘无法卸载(含有根目录),所以内核无法重新取得分区表信息,因此此时系统会要求我们重新启动(reboot)以更新内核的分区表信息。所以需要使用 partprobe 命令。
fdisk -l # 查看分区情况
fdisk 没有办法处理大于 2TB 以上的磁盘分区,此时你就需要用到 parted 这个命令了。
另外,因为SATA硬盘最多能够支持到15号的分区,IDE则可以支持63号。所以我们在分区的时候千万不要超过15号。否则即使你还有剩余的柱面容量,但还是会无法继续进行分区。
3、格式化
mkfs 即是(make file system)
mkfs -t ext4 /dev/sdb1 #创建文件系统
4、挂载 / 卸载 文件系统
在安装Linux操作系统的过程中,自动建立或识别的分区通常会由系统自动完成挂载。然而对于后来新增加的硬盘分区、USB盘、光盘等设备,有时候还需要管理员手动进行挂载,实际上用户访问的是经过格式化后建立的文件系统。挂载一个分区时,必须为其制定一个目录作为挂靠点,用户通过这个目录访问设备中的文件、目录数据。
查看系统支持那些文件系统和驱动程序:
/etc/filesystems:系统指定的测试挂在文件系统类型;
/proc/filesystem:Linux系统已经加载的文件系统类型;
/lib/modules/$(uname -r)/kernel/fs/ :Linux支持的文件系统驱动程序;
df -hT #查看已挂载分区的使用情况
注意注意:
如果你要挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时消失,并不是被覆盖掉了,而是被隐藏起来了,等到新分区被卸载之后才会重新出现。
但是如果直接将 新的分区,如 "/dev/sdb1" 挂载到某个目录下,如 "/home"下,则会导致 "/home" 目录以前的全部文件被覆盖,但并未消失。且不会将此前的目录容量加上,这会导致严重的问题。如 "/home" 目录下的 "/zhang" 用户便不能登录,zhang 用户的所有配置和文件也将消失。所以必须注意这个问题。
一定要注意,复制 /home 下面的全部文件,不要忘了隐藏文件,不要忘了权限。不然你更改过后可能导致你这个用户起不来,这就很尴尬了。虚拟机还好,可以进 root 后再修改回来,要使远程主机不允许 root 登录,那你就只有跑过去机房了。如果是阿里云的服务器,哈哈哈。
所以我们需要先将 "/dev/sdb1" 挂载到 "/mnt" 下;
再将 "/home/*" 所有东西复制到 "/mnt/";
接着删除 "/home/*" 全部文件;若因为与此目录有关的程序运行占用目录导致无法删除 "/home",则利用 lsof 命令找到这些程序的 PID,然后 "kill -9 PID" 后在删除 "/home" 。lsof 命令 列出被进程所打开的文件的信息
之后再解挂载 "/mnt";
最后再将 "/dev/sdb1" 挂载到 "/home";
mount /dev/sdb1 /mnt
cp -Rp /home/* /mnt #R递归负责,p保持复制的权限,如果没有这个,到时后/home目录下的某文件夹的所有者和所属组都是 root,没有办法切换到此用户。
rm -rf /home #此处可能会用到 lsof 命令 --> lsof /home
umount /mnt
mount /dev/sdb1 /home
Bingo !!!
好像还差一步,需要将此写进 /etc/fstab 配置文件中,让它开启自读取。
设置文件系统的自动挂载
/etc/fstab 配置文件:包含了需要开机后自动挂载的文件系统记录。Linux系统每次开机时,会自动读取这个文件的内容,自动挂载所指定的文件系统。
在 fstab 配置文件中加入挂载点之后其实就已经是开机自动挂载了,不需要用 mount 命令挂载。但是还是用 mount 实在,因为最后还是需要写入 /etc/fstab
vi /etc/fstab
第一字段:
设备名或设备卷标名。
第二字段:文件系统的挂载点目录的位置。
第三字段:文件系统类型,如ext3、swap等。
第四字段:挂载参数,即mount命令“-o”选项后可使用的参数,如defaults、rw等。
第五字段:表示文件系统是否需要dump备份,一般设为1时表示需要,设为0时将被dump所忽略。
第六字段:该数字用于决定在系统启动时进行磁盘检查的顺序,0表示不进行检查,1表示优先检查,2表示其次检查。对于根分区应设为1,其他分区设为2.
添加自动挂载 "/dev/sdb1"分区的配置
vi /etc/fstab
/dev/sdb1 /home ext4 defaults 0 0
这里我将 defaults 错写成 default,导致我开机后用户 zhang 无法登录,然后找了半天才找到这个错误。
内存交换空间(swap)
还记得在安装Linux时一定需要的两个分区吧,一个是根(/)分区,一个就是内存交换分区(swap)。
我们知道CPU多都取得数据都来自内存,那当内存不足的时候,为了让后续的程序可以顺利运行,因此在内存中暂不使用的程序与数据就会被挪到swap中。此时内存就会空出来给需要执行的程序加载。
由于swap使用硬盘来暂时放置内存中的信息,所以用到swap时,你的主机硬盘灯就会开始闪个不停。
mkswap # 建立交换分区
LVM概述
LVM是Linux系统中对磁盘分区进行管理的一种逻辑机制,它是建立再硬盘和分区之上,文件系统之下的一个逻辑层,在建立文件系统时屏蔽了下层的磁盘分区布局,能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高了磁盘管理的灵活性。
在安装RHEL5系统的过程中选择自动分区时,默认就会采用LVM分区方案,不需要再进行手动配置。如果有特殊需要,也可以使用安装向导提供的磁盘定制工具调整LVM分区。需要注意的是,“/boot”分区不能基于LVM创建,必须独立出来。
关于LVM的几个基本术语:
1、PV(Physical Volume,物理卷)
物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录LVM的属性,并把存储空间分割成默认大小为4MB的基本单元PE,从而构成物理卷。
物理卷一般直接使用设备文件名称,如“/dev/sdb1”、“/dev/sdb2”等。
用于转换成物理卷的普通分区,建议先使用fdisk工具将分区类型的ID标记号改为“8e”。若是整块硬盘,可以将所有磁盘空间划分为一个主分区后再作相应调整。
2、VG(Volume Group,卷组)
由一个或多个物理卷组成一个整体,即成为卷组,在卷组中可以动态地添加或移除物理卷。许多个物理卷可以分别组成不同的卷组,卷组名称由用户自行定义。
3、LV(Logical Volume,逻辑卷)
逻辑卷是建立在卷组之上的,与物理卷没有直接关系。
对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中“切出”一小块空间,作为用户创建文件系统的基础,这一小块空间就称为逻辑卷。使用mkfs等工具在逻辑卷上创建文件系统以后,即可挂载到Linux系统中的目录下使用。
通过上述对物理卷、卷组、逻辑卷的解释可以看出,建立LVM分区管理机制的过程就是:首先,将普通分区或整个硬盘创建为物理卷;接下来,将物理上比较分散的各物理卷的存储空间组成一个逻辑整体,即卷组;最后,基于卷组这个整体,分割出不同的数据存储空间,形成逻辑卷。而逻辑卷才是最终用户可以格式化并挂载使用的存储单位。
主要命令的语法
pvcreate 设备名
vgcreate 卷组名 物理卷名1 物理卷名2
lvcreate -L 大小 -n 逻辑卷名 卷组名
lvextend -L +大小 /dev/卷组名/逻辑卷名