有的时候我们需要快速创建一些空白的大文件来占用磁盘空间,以进行一些系统测试。以下是常用的两种方法: * **使用 dd 命令** * **基本语法** :`dd if=/dev/zero of=output_file bs=1G count=3`。其中,`if=/dev/zero` 表示输入文件为 `/dev/zero`,它是一个可以提供连续零字节流的设备文件;`of=output_file` 指定输出文件的名称为 output_file;`bs=1G` 表示块大小为 1G;`count=3` 表示要复制的块的数量为 3,这样总共就会生成一个大小为 3G 的文件。 * **注意事项** :`dd` 命令在执行过程中不会显示进度信息,只能等待命令执行完成。而且如果指定的目标文件已经存在,`dd` 命令会直接覆盖它,所以在使用时要谨慎,确保不会误删重要数据。 * **使用 fallocate 命令** * **基本语法** :`fallocate -l 3G output_file`。这里 `-l 3G` 指定了要分配的文件大小为 3G,`output_file` 是要创建的文件名。`fallocate` 命令通过直接分配磁盘空间来创建文件,比 `dd` 命令更快,因为它不会像 `dd` 那样真正地写入数据块,而是直接在文件系统中分配空间。 * **适用场景和限制** :`fallocate` 创建的文件中的空间可能没有被实际初始化,对于某些需要文件内容全部为零或者有特定数据的应用场景可能不太合适。不过,如果你只是想快速占用磁盘空间,它是一个非常高效的选择。而且,并非所有的文件系统都支持 `fallocate` 命令来预分配空间,例如在一些老式的文件系统上可能无法使用。 ## 拓展: 以下是 `dd` 和 `fallocate` 指令在 Linux 下的详细用法,包括常用的参数和一些使用场景: ### `dd` 指令详细用法 #### 基本语法 ```bash dd [参数列表] ``` #### 常用参数 | 参数 | 描述 | | --------------- | -------------------------------------------------------------------------- | | `if=文件名` | 指定输入文件,`/dev/zero` 是一个特殊文件,能提供连续的零字节流。 | | `of=文件名` | 指定输出文件,即要创建的文件名。 | | `bs=块大小` | 设置读写操作的块大小,默认单位是字节,可以加上单位如 `K``M``G` 等。 | | `count=块数` | 指定要复制的块的数量,与 `bs` 配合使用,最终文件大小为 `bs × count`。 | | `conv=转换` | 指定数据转换选项,如 `sync`(对块进行同步填充)等。 | | `status=进度` | 控制是否显示进度信息,如 `status=progress` 会显示传输进度。 | #### 使用示例 ##### 创建指定大小的文件 ```bash # 创建一个大小为 3G 的文件(/dev/zero 作为输入,指定输出文件名、块大小和块数量) dd if=/dev/zero of=output_file bs=1G count=3 status=progress ``` ##### 备份和恢复分区 ```bash # 备份整个分区到一个文件(假设分区设备名为 /dev/sda1) dd if=/dev/sda1 of=partition_backup.img bs=4M status=progress # 从备份文件恢复分区 dd if=partition_backup.img of=/dev/sda1 bs=4M status=progress ``` ##### 查看文件内容 ```bash # 查看文件开头的内容(显示前 512 字节) dd if=output_file bs=512 count=1 | hexdump -C ``` ### `fallocate` 指令详细用法 #### 基本语法 ```bash fallocate [选项] 文件名 ``` #### 常用选项 | 选项 | 描述 | | ----------------------- | ------------------------------------------------------------------------------ | | `-l, --length 大小` | 指定要分配的文件大小,可以使用 `K``M``G` 等单位。例如 `3G` 表示 3 吉字节。 | | `-o, --offset 偏移量` | 指定偏移量,用于从文件的某个位置开始分配空间。 | | `-z, --zero` | 将分配的空间初始化为零(实际写入零),默认情况下分配空间不会初始化。 | | `--collapse-range` | 用于减少文件大小,需要结合偏移量和长度使用。 | | `--insert-range` | 在文件中插入指定长度的空间,同样需要偏移量和长度。 | #### 使用示例 ##### 创建指定大小的文件 ```bash # 创建一个大小为 3G 的文件 fallocate -l 3G output_file ``` ##### 将文件大小减少 ```bash # 将文件 size_reduce.txt 的大小减少 1M,从位置 2M 开始 fallocate --collapse-range -o 2M -l 1M size_reduce.txt ``` ##### 在文件中插入空间 ```bash # 在文件 insert_space.txt 的位置 3M 处插入 512K 的空间 fallocate --insert-range -o 3M -l 512K insert_space.txt ``` ##### 创建零初始化文件 ```bash # 创建一个 2G 的文件,并将空间初始化为零 fallocate -l 2G -z zero_initialized_file ``` 在实际操作中,选择 `dd` 或 `fallocate` 取决于具体需求。如果需要快速分配大量空间且不关心文件内容是否初始化,`fallocate` 是更好的选择;如果需要对文件内容进行特定操作(如写入零或备份设备),则使用 `dd`。 在创建大文件之前,建议先检查磁盘空间是否足够,可以使用 `df -h` 命令来查看各个挂载点的磁盘使用情况,避免因磁盘空间不足而导致系统或其他应用程序出现故障。同时,创建大文件后,如果不再需要,也应该及时删除,以释放磁盘空间,可以使用 `rm` 命令来删除文件。 Loading... 有的时候我们需要快速创建一些空白的大文件来占用磁盘空间,以进行一些系统测试。以下是常用的两种方法: * **使用 dd 命令** * **基本语法** :`dd if=/dev/zero of=output_file bs=1G count=3`。其中,`if=/dev/zero` 表示输入文件为 `/dev/zero`,它是一个可以提供连续零字节流的设备文件;`of=output_file` 指定输出文件的名称为 output_file;`bs=1G` 表示块大小为 1G;`count=3` 表示要复制的块的数量为 3,这样总共就会生成一个大小为 3G 的文件。 * **注意事项** :`dd` 命令在执行过程中不会显示进度信息,只能等待命令执行完成。而且如果指定的目标文件已经存在,`dd` 命令会直接覆盖它,所以在使用时要谨慎,确保不会误删重要数据。 * **使用 fallocate 命令** * **基本语法** :`fallocate -l 3G output_file`。这里 `-l 3G` 指定了要分配的文件大小为 3G,`output_file` 是要创建的文件名。`fallocate` 命令通过直接分配磁盘空间来创建文件,比 `dd` 命令更快,因为它不会像 `dd` 那样真正地写入数据块,而是直接在文件系统中分配空间。 * **适用场景和限制** :`fallocate` 创建的文件中的空间可能没有被实际初始化,对于某些需要文件内容全部为零或者有特定数据的应用场景可能不太合适。不过,如果你只是想快速占用磁盘空间,它是一个非常高效的选择。而且,并非所有的文件系统都支持 `fallocate` 命令来预分配空间,例如在一些老式的文件系统上可能无法使用。 ## 拓展: 以下是 `dd` 和 `fallocate` 指令在 Linux 下的详细用法,包括常用的参数和一些使用场景: ### `dd` 指令详细用法 #### 基本语法 ```bash dd [参数列表] ``` #### 常用参数 | 参数 | 描述 | | --------------- | -------------------------------------------------------------------------- | | `if=文件名` | 指定输入文件,`/dev/zero` 是一个特殊文件,能提供连续的零字节流。 | | `of=文件名` | 指定输出文件,即要创建的文件名。 | | `bs=块大小` | 设置读写操作的块大小,默认单位是字节,可以加上单位如 `K``M``G` 等。 | | `count=块数` | 指定要复制的块的数量,与 `bs` 配合使用,最终文件大小为 `bs × count`。 | | `conv=转换` | 指定数据转换选项,如 `sync`(对块进行同步填充)等。 | | `status=进度` | 控制是否显示进度信息,如 `status=progress` 会显示传输进度。 | #### 使用示例 ##### 创建指定大小的文件 ```bash # 创建一个大小为 3G 的文件(/dev/zero 作为输入,指定输出文件名、块大小和块数量) dd if=/dev/zero of=output_file bs=1G count=3 status=progress ``` ##### 备份和恢复分区 ```bash # 备份整个分区到一个文件(假设分区设备名为 /dev/sda1) dd if=/dev/sda1 of=partition_backup.img bs=4M status=progress # 从备份文件恢复分区 dd if=partition_backup.img of=/dev/sda1 bs=4M status=progress ``` ##### 查看文件内容 ```bash # 查看文件开头的内容(显示前 512 字节) dd if=output_file bs=512 count=1 | hexdump -C ``` ### `fallocate` 指令详细用法 #### 基本语法 ```bash fallocate [选项] 文件名 ``` #### 常用选项 | 选项 | 描述 | | ----------------------- | ------------------------------------------------------------------------------ | | `-l, --length 大小` | 指定要分配的文件大小,可以使用 `K``M``G` 等单位。例如 `3G` 表示 3 吉字节。 | | `-o, --offset 偏移量` | 指定偏移量,用于从文件的某个位置开始分配空间。 | | `-z, --zero` | 将分配的空间初始化为零(实际写入零),默认情况下分配空间不会初始化。 | | `--collapse-range` | 用于减少文件大小,需要结合偏移量和长度使用。 | | `--insert-range` | 在文件中插入指定长度的空间,同样需要偏移量和长度。 | #### 使用示例 ##### 创建指定大小的文件 ```bash # 创建一个大小为 3G 的文件 fallocate -l 3G output_file ``` ##### 将文件大小减少 ```bash # 将文件 size_reduce.txt 的大小减少 1M,从位置 2M 开始 fallocate --collapse-range -o 2M -l 1M size_reduce.txt ``` ##### 在文件中插入空间 ```bash # 在文件 insert_space.txt 的位置 3M 处插入 512K 的空间 fallocate --insert-range -o 3M -l 512K insert_space.txt ``` ##### 创建零初始化文件 ```bash # 创建一个 2G 的文件,并将空间初始化为零 fallocate -l 2G -z zero_initialized_file ``` 在实际操作中,选择 `dd` 或 `fallocate` 取决于具体需求。如果需要快速分配大量空间且不关心文件内容是否初始化,`fallocate` 是更好的选择;如果需要对文件内容进行特定操作(如写入零或备份设备),则使用 `dd`。 在创建大文件之前,建议先检查磁盘空间是否足够,可以使用 `df -h` 命令来查看各个挂载点的磁盘使用情况,避免因磁盘空间不足而导致系统或其他应用程序出现故障。同时,创建大文件后,如果不再需要,也应该及时删除,以释放磁盘空间,可以使用 `rm` 命令来删除文件。 最后修改:2025 年 06 月 05 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏