文件系统操作与磁盘管理

一、简单文件系统操作

1.查看磁盘和目录的容量
使用 df 命令查看磁盘的容量
$ df 

一般使用情况下,我们只是关心环境中的rootfs或者物理主机上的/dev/sda2

"rootfs" : (Root File System)它是 Ramfs(Ramfs 是一个非常简单的 Linux 文件系统用于实现磁盘缓存机制作为动态可调整大小的基于 ram 的文件系统)或者 tmpfs 的一个特殊实例,它作为系统启动时内核载入内存之后,在挂载真正的的磁盘之前的一个临时文件系统。通常的主机会在系统启动后用磁盘上的文件系统替换,只是在一些嵌入式系统中会只存在一个 rootfs ,运行在虚拟环境中共享主机资源的系统也可能会采用这种方式。

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

接着你还会看到"1k-blocks"这个陌生的东西,它表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量,我们以一种看得懂的方式展示:

$ df -h 
使用 du 命令查看目录的容量
# 默认同样以 blocks 的大小展示 
$ du
 # 加上`-h`参数,以更易读的方式展示
 $ du -h 

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

# 只查看1级目录的信息
 $ du -h -d 0 ~ 
# 查看2级 
$ du -h -d 1 ~ 

 

du(estimate file space usage)命令与df(report file system disk space usage)只用一字只差,注意不要弄混淆了,可以从man手册中获取命令的完整描述,记全称就不会搞混了。

二、简单的磁盘管理

1.创建虚拟磁盘
dd 命令简介(部分说明来自dd (Unix) wiki))

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

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

我们先来试试用dd命令从标准输入读入用户输入到标准输出或者一个文件:

# 输出到文件
 $ 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 个字节(一个英文字符占一个字节)内容,显然超过了设定大小。使用和ducat命令看到的写入完成文件实际内容确实只有 10 个字节(那个黑底百分号表示这里没有换行符),而其他的多余输入将被截取并保留在标准输入。

前面说到dd在拷贝的同时还可以实现数据转换,那下面就举一个简单的例子:将输出的英文字符转换为大写再写入文件:

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

 

你可以在man文档中查看其他所有转换参数。

使用 dd 命令创建虚拟镜像文件

/dev/zero设备创建一个容量为 256M 的空文件:

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

 

然后将这个文件格式化(写入文件系统),这里我们要学到一个(准确的说是一组)新的命令来完成这个需求。

使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)

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

我们可以简单的使用下面的命令来将我们的虚拟磁盘镜像格式化为ext4文件系统:

$ sudo mkfs.ext4 virtual.img 

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

如果你想想知道 Linux 支持哪些文件系统你可以输入ls -l /lib/modules/$(uname -r)/kernel/fs查看。

使用 mount 命令挂载磁盘到目录树

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

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

我们先来使用mount来查看下主机已经挂载的文件系统:

$ sudo mount 

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

那么我们如何挂载真正的磁盘到目录树呢,mount命令的一般格式如下:

mount [options] [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 

另外关于 loop 设备,大家可能会有诸多疑问,那么请看下面来自维基百科/dev/loop的说明:

在类 UNIX 系统中,/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。

在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。

这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。如果挂载目录中本身有文件,这些文件在挂载后将被禁止使用。

使用 fdisk 为磁盘分区

必须有物理磁盘,在虚拟磁盘上无法使用该命令。

# 查看硬盘分区表信息 
$ sudo fdisk -l 

输出结果中开头显示了主机上的磁盘的一些信息,包括容量扇区数,扇区大小,I/O 大小等信息。

重点看一下中间的分区信息,/dev/sda1,/dev/sda2 为主分区分别安装了 Windows 和 Linux 操作系统,/dev/sda3 为交换分区(可以理解为虚拟内存),/dev/sda4 为扩展分区其中包含 /dev/sda5,/dev/sda6,/dev/sda7,/dev/sda8 四个逻辑分区,因为主机上有几个分区之间有空隙,没有对齐边界扇区,所以分区之间的不是完全连续的。

# 进入磁盘分区模式 
$ sudo fdisk virtual.img 

在进行操作前我们首先应先规划好我们的分区方案,这里我将在使用 128M(可用 127M 左右)的虚拟磁盘镜像创建一个 30M 的主分区剩余部分为扩展分区包含 2 个大约 45M 的逻辑分区。

操作完成后输入p查看结果如下:

最后不要忘记输入w写入分区表。

使用 losetup 命令建立镜像与回环设备的关联
$ sudo losetup /dev/loop0 virtual.img 
# 如果提示设备忙你也可以使用其它的回环设备,"ls /dev/loop*"参看所有回环设备
 # 解除设备关联 
$ sudo losetup -d /dev/loop0 

然后再使用mkfs格式化各分区(前面我们是格式化整个虚拟磁盘镜像文件或磁盘),不过格式化之前,我们还要为各分区建立虚拟设备的映射,用到kpartx工具,需要先安装:

$ sudo apt-get install kpartx $ sudo kpart kpartx -av /dev/loop0 # 取消映射 $ sudo kpart kpartx -dv /dev/loop0 

接着再是格式化,我们将其全部格式化为 ext4:

$ sudo mkfs.ext4 -q /dev/mapper/loop0p1 $ sudo mkfs.ext4 -q /dev/mapper/loop0p5 $ sudo mkfs.ext4 -q /dev/mapper/loop0p6 

格式化完成后在/media目录下新建四个空目录用于挂载虚拟磁盘:

$ mkdir -p /media/virtualdisk_{1..3} 
# 挂载磁盘分区 $ sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1 $ sudo mount /dev/mapper/loop0p5 /media/virtualdisk_2 $ sudo mount /dev/mapper/loop0p6 /media/virtualdisk_3 # 卸载磁盘分区 $ sudo umount /dev/mapper/loop0p1 $ sudo umount /dev/mapper/loop0p5 $ sudo umount /dev/mapper/loop0p6 

然后:

$ df -h 

时间: 2024-10-14 00:18:33

文件系统操作与磁盘管理的相关文章

1.7文件系统操作与磁盘管理(学习过程)

文件系统操作与磁盘管理 实验介绍 本节实验的文件系统操作的内容十分简单,只会包含几个命令的几个参数的讲解,但掌握这些也将对你在学习 Linux 和实验楼后续其他课程的过程中有极大帮助. 因为本课程的定位为入门基础,尽快上手,故没有打算涉及太多理论内容,前面省略了关于 Linux 文件系统的一些基本知识,也因为我们是在线实验环境,所以也避开了很少一部分但又十分重要的关于硬件的内容,我们只能期待用户能够抱着提高自学能力的心态自己去补充相关的知识. 一.简单文件系统操作 1.查看磁盘和目录的容量 使用

第七节 文件系统操作与磁盘管理

一.简单文件系统操作 1.查看磁盘和目录的容量 使用df命令查看磁盘的容量: 使用du命令查看目录的容量: 二.简单的磁盘管理 1.创建虚拟磁盘 使用dd命令创建虚拟景象文件 使用mkfs命令格式化磁盘 使用fdisk将磁盘分区

Linux 基础入门----文件系统操作与磁盘管理

介绍 本节的文件系统操作的内容十分简单,只会包含几个命令的几个参数的讲解,但掌握这些也将对你在学习后续其他内容的过程中有极大帮助. 因为本课程的定位为入门基础,尽快上手,故没有打算涉及太多理论内容,前面省略了关于 Linux 文件系统的一些基本知识,也因为我们是在线实验环境,所以也避开了很少一部分但又十分重要的关于硬件的内容,我们只能期待用户能够抱着提高自学能力的心态自己去补充相关的知识. 一.简单文件系统操作 1.查看磁盘和目录的容量 使用 df 命令查看磁盘的容量 $ df 在实验楼的环境中

Linux文件系统操作与磁盘管理

简单文件操作 df---->report file system disk space usage du---->estimate file space usage 2.简单的磁盘管理 dd创建虚拟磁盘镜像文件 mkfs格式化磁盘 mount挂载磁盘到目录树,unmount卸载已挂载磁盘 fdisk磁盘分区 loseup建立镜像与回环设备的关联

文件系统操作与磁盘管理、帮助命令以及crontab

使用 df 命令查看磁盘的容量,使用 du 命令查看目录的容量 du -h #同--human-readable 以K,M,G为单位,提高信息的可读性.du -a #同--all 显示目录中所有文件的大小.du -s #同--summarize 仅显示总计,只列出最后加总的值. dd命令用于转换和复制文件,不过它的复制不同于cp.之前提到过关于 Linux 的很重要的一点,一切即文件,在 Linux 上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普

Linux操作_磁盘管理_增加虚拟磁盘

环境:虚拟机 VM 12,Linux版本号 CentOS 7.3 1,在当前的虚拟机选项卡点击鼠标右键,选择“设置” 2,在弹出的对话框中左侧选中“磁盘”->点击下方“添加”按钮,在弹出的“添加硬件向导”对话框中点击“下一步”按钮 3,“选择磁盘类型”这里默认不修改,直接点击“下一步” 4,“选择磁盘”对话框保持默认,继续点击“下一步” 5,“指定磁盘容量”这里设定“最大磁盘大小”为5GB,然后选择“将虚拟磁盘存储为单个文件”单选按钮 6,点击“下一步”,然后点击“完成”按钮,最终完成添加新的虚

Linux磁盘管理基础

Linux磁盘管理基础 硬盘结构 文件系统与MBR.GTP 磁盘管理三步骤:分区.格式化.挂载 mount 硬盘结构 硬盘的基本组成材质是盘片,不同容量硬盘的盘片数不等.每个盘片有两面,都可记录信息.盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道,不同盘片相同半径的磁道所组成的圆柱称为柱面,每个磁道被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2^N 次方(N=0.1.2.3)字节信息.在DOS中每扇区是128×2^2 次方=512字节. 硬盘存储相关术语:CHS hea

分析Linux磁盘管理与文件系统专题三

1.前言 紧接着我的上一篇博客进行磁盘管理操作: http://zhangfengzhe.blog.51cto.com/8855103/1430531 我们已经对磁盘进行了分区,信息如下: [[email protected] ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 5

Linux入门之磁盘管理(2)文件系统

Linux入门之磁盘管理(2)文件系统 linux分区构成完成之后,一般需要进行对其创建指定的文件系统,也就是我们常说的格式化,然后对其进行分区挂载,提供指定分区的访问点.不同的分区格式会在文件系统内部提供不同的对该分区的数据存储的格式分配,以及其内部模块会支持不同的分区的接口及方法调用,例如对一个文件的打开.读取.写入.关闭等功能,每个文件系统都会有各种不同的特点. 常见的系统文件系统: linux: ext2.ext3.ext4:xfs(SGI):btrfs(Oracle):reiserfs