文件系统操作与磁盘管理

df,du,mount命令的使用,以及磁盘相关知识学习。

查看磁盘和目录的容量

df

dev/sda1:是对应这主力硬盘的分区,后面的数字表示分区号,数字前面的字母a表示第几块硬盘(也可能是可移动磁盘)。如果主机上有多快磁盘,可能会出现/dev/sdb,/dev/sdc,这些磁盘设备都会放在/dev目录下以文件的存在形式。

1k.块:表示磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用容量和可用容量。

接下来的命令,显示结果一目了然:

df -h

du查看目录容量

du  //默认以块的大小展示
du -h  //以更易读的方式展示

-d参数指定查看目录的深度

du -h -d 0 ~ //只查看1级目录的深度
du -h -d 1 ~ //查看2级

常用参数:
du -h //以k,M,G为单位,提高信息的可读性
du -a //同-aall,显示目录中所有文件的大小
du s //同–summarize 仅仅显示终极,只列出最后加总的值

下面涉及的命令具有一定的危险性,操作不当可能会丢失你的个人数据,初学者建议在虚拟环境中进行操作

创建虚拟磁盘

dd命令简介

dd命令用于转换和复制文件,不过它的复制不同于cp。Linux中,一切即文件,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普通文件一样,主持在各自的驱动程序中实现了对应的功能,dd也可以读取文件或写入这些文件。于是dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据或者空数据等任务中。dd程序也可以在复制时处理数据,例如转换字节序、或在ASCII与EBCDIC编码间互换。

dd命令行语句与其他的Linux程序不同,因为它的命令选项格式为选项=值,而不是标准的--选项 值-选项=值dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file输入文件)和of(output file输出文件)改变。

//输出到文件
dd of=test bs=10 count=1    
dd if=/dev/stdin of=test bs=10 count=1
//输出到标准输出
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
//在打完这个命令后,继续在终端打字,作为你的输入

上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如’K’,’M’,’G’等单位),count用于指定块数量。如上图所示,我指定只读取总共 10 个字节的数据,当我输入了“hello shiyanlou”之后加上空格回车总共 16 个字节(一个英文字符占一个字节)内容,显然超过了设定大小。使用du和cat命令看到的写入完成文件实际内容确实只有 10 个字节(那个黑底百分号表示这里没有换行符),而其他的多余输入将被截取并保留在标准输入。

dd在拷贝的同时可以实现数据转换,例子:将输出的英文字符转换为大写在输入文件:

dd if=/dev/stdin of=test bs=10 count=1 conv=ucase

dd命令创建虚拟镜像文件

dd完成创建虚拟磁盘的步骤
第一步:从/dev/zero设置创建一个容量为265M的空文件

dd if=/dev/zero of=virtual.img bs=1M count=256
du -h virtual.img

第二步:将上述创建文件格式化(写入文件系统)

使用mkfs命令格式化磁盘

可以在命令行输入sudo mkfs 然后按下tab键,可以看到多个以mkfs为前缀的命令,这些不同的后缀其实就是表示着不同的文件系统,可以用 mkfs 格式化成的文件系统。

sudo mkfs.ext4 virtual.img

ext4:EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。

可以看到实际 mkfs.ext4 是使用 mke2fs 来完成格式化工作的。mke2fs 的参数很多,不过我们也不会经常格式化磁盘来玩,所以就掌握这基本用法吧,等你有特殊需求时,再查看 man 文档解决。

第三步: 使用count命令挂载磁盘到目录树

用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。该指令通常是使用在 USB 或其他可移除存储设备上,而根目录则需要始终保持挂载的状态。又因为 Linux/UNIX 文件系统可以对应一个文件而不一定要是硬件设备,所以可以挂载一个包含文件系统的文件到目录树。

Linux/UNIX 命令行的 mount 指令是告诉操作系统,对应的文件系统已经准备好,可以使用了,而该文件系统会对应到一个特定的点(称为挂载点)。挂载好的文件、目录、设备以及特殊文件即可提供用户使用。

查看主机已经挂载的文件系统:

sudo mount

输出的结果中每一行表示一个设备或虚拟设备,每一行最前面是设备名,然后是 on 后面是挂载点,type 后面表示文件系统类型,再后面是挂载选项(比如可以在挂载时设定以只读方式挂载等等)。

挂在磁盘到目录树,mount命令的一般格式为:

mount 【optons】 [source] [directory]

以下常用操作:

mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro[文件系统源]]] [挂载点]

将创建的磁盘镜像挂载到/mnt目录:

mount -o loop -t ext4 virtual.img /mnt 
//也可以省略挂载类型,很多时候 mount 会自动识别

/以只读方式挂载
mount -o loop --ro virtual.img /mnt
//或者mount -o loop,ro virtual.img /mnt

使用umount命令卸载已挂载磁盘

命令格式 sudo umount 已挂载设备名或者挂载点,如:
sudo umount /mnt

fdisk为磁盘分区

查看磁盘分区表信息

sudo fdisk -l

sudo fdisk virtual.img

m:为帮助手册
n: 创建新分区,接着输入分区号,分区起始和结尾,两个相减为分区大小
w: 写入新建分区
p: 查看现有分区

zxp wechat
欢迎关注微信公众号!