当前位置: 首页 > news >正文

linux驱动开发-磁盘管理

目录

一、mount基本语法

二、常见选项

三、常用命令

二 fdisk --磁盘分区工具

fdisk作用

命令格式:

选项

 分区示例

查看分区情况  -p

 删除分区 -d

新增分区 -n

修改分区类型 —— t

保存之前所有的操作 —— w


在Linux系统中,mount命令是一种非常常见且有用的工具,用于将文件系统连接到指定的挂载点。通过使用mount命令,管理员可以访问和管理存储设备上的文件和目录,包括硬盘驱动器、CD或DVD驱动器、闪存驱动器等。

一、mount基本语法

mount命令的基本语法如下:

mount [-l][-t <文件系统类型>][-o <选项>] <设备名称> <挂载点>
  • -l:以列表的形式显示当前已挂载的文件系统。

  • -t <文件系统类型>:指定要挂载的文件系统的类型,例如ext4、ntfs等。

  • -o <选项>:指定挂载选项,比如读写权限、访问控制等。

  • <设备名称>:指定要挂载的设备的名称或路径。

  • <挂载点>:指定要挂载到的目录路径。

  • 二、常见选项

  • mount命令支持多种选项,可以组合使用,常见选项:

    ro:以只读模式挂载文件系统。

    rw:以读写模式挂载文件系统。

    remount:重新挂载一个已经挂载的文件系统,可以修改挂载选项。

    user:允许普通用户挂载文件系统,而不仅仅是超级用户。

    nouser:只允许超级用户挂载文件系统。

    exec:允许在文件系统中执行可执行文件。

    noexec:禁止在文件系统中执行可执行文件。

  • 三、常用命令

  • 挂载设备到指定挂载点:

  • mount /dev/sdb1 /mnt
  • 显示当前已挂载的文件系统:

  • mount -l
  • 以只读模式挂载文件系统:

  • mount -o ro /dev/sdc1 /mnt
  • 重新挂载已挂载的文件系统:

  • mount -o remount,rw /dev/sdc1 /mnt

    二 fdisk --磁盘分区工具

  • 分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。

      防止数据丢失:如果系统只有一个分区,那么这个分区损坏,用户将会丢失所的有数据。

      增加磁盘空间使用效率:可以用不同的区块大小来格式化分区,如果有很多1K的文件,而硬盘分区区块大小为4K,那么每存储一个文件将会浪费3K空间。这时我们需要取这些文件大小的平均值进行区块大小的划分。

      数据激增到极限不会引起系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起的系挂起。

  • fdisk作用

  • fdisk命令可以用于对磁盘进行分区操作,用户可以根据实际情况进行合理划分,这样后期挂载和用时会方便很多。

命令格式:

fdisk [选项] [磁盘设备]
  • 选项:指定要执行的操作。
  • [磁盘设备]:指定要操作的磁盘设备(例如 /dev/sda)。

选项

l:列出所有磁盘及其分区表,或者指定磁盘设备的分区表。
b [大小]:指定磁盘的逻辑块大小(如 512、1024、2048、4096 字节)。
u:显示分区的起始和结束位置,以扇区而不是柱面为单位。
c [体积]:忽略 DOS 兼容模式,或者开启 DOS 兼容模式(dos、nondos)。
v:显示 fdisk 的版本信息。

命令示例:

列出所有磁盘及其分区表

fdisk -l

查看指定磁盘设备的分区表

fdisk -l /dev/sda

显示分区的起始和结束位置,以扇区为单位

fdisk -lu /dev/sda

 分区示例

使用 fdisk命令对Ubuntu上 检测到的设备 /dev/sdb 进行分区

sudo fdisk /dev/sdb

之后会提示帮助提示指令

查看分区情况  -p

如果输入 p 此时就可以看到如下内容,这里展示的就是磁盘分区情况,该磁盘一共分为了三个区,每个区都有自己的编号,比如 sdb1,代表分区编号是1

 删除分区 -d

输入 d 可以删除指定分区,每次只能删除一个分区,删除哪个分区需要你继续输入分区编号。

新增分区 -n

输入 n 开始新增一个分区,第一步选择主分区还是扩展分区 

第二步,给新增分区分配编号,可选项为1、3、4

第三步,确定新增分区的起始位置,单位是扇区(注意不是字节)。假设新增分区从第 20480 个扇区开始。(第20480个扇区,也就是第 20480*512 个字节的位置,即第 10M 的位置)

第四步,确定新增分区的结束位置,或者确定分区大小。这里的写法比较多样,主要有三种写法:

  • 确定分区的结束扇区位置(不推荐)
  • 确定分区大小:比如  +500M,表示新增分区的大小是 500 M(单位不能省略)
  • 确定分区所占扇区个数:比如 +1024000,表示新增分区的大小是1024000个扇区的大小

通常情况下,使用第二种方式即可

修改分区类型 —— t

输入 t 以后,先选择分区编号,即你要修改哪个分区的分区类型

接下来如果不知道分区类型对应的十六进制是多少,可以先输入 L 查看分区类型映射表

假设我们输入 83(分区类型为Linux)

然后输入 p 查看第二分区的分区类型

保存之前所有的操作 —— w

如果直接 Ctrl + C 退出,不会保存之前的所有操作。

三 mkfs

这里明确个小问题,为什么要进行磁盘格式化??

格式化,相当于给一片城区住宅标记路名门牌号,告诉邮局或其他什么需要登门拜访的单位和个人:

有谁住在哪、找谁往哪走。

格式化后,整个磁盘的所有可用磁记录表面,会被标记成一圈圈一段段的扇区和簇,对应的编号记录存放在当前分区的特定位置,做成一个数据库,便于操作系统访问,相当于黄页电话簿。

同理,分区表也是类似的数据库,存放在整个硬盘的头部,标记了该硬盘拥有多少个分区,可以理解为邮政编码。

mkfs => make file system 功能: 在特定分区上建立linux 文件系统

在磁盘分区上创建ext2、ext3、ext4、ms-dos、vfat、xfs文件系统,默认情况下会创建ext2。mkfs用于在设备上构建Linux文件系统,通常是硬盘分区。文件要么是设备名称(例如/dev/vda1,/dev/vdb1),要么是包含文件系统的常规文件。成功返回0,失败返回1。

命令详细使用说明

mkfs [options] [-t <type>] [fs-options] <device> [<size>]
mkfs [参数]...[设备]...Usage:mkfs [options] [-t <type>] [fs-options] <device> [<size>]Options:-t, --type=<type>  filesystem type; when unspecified, ext2 is usedfs-options     parameters for the real filesystem builder<device>       path to the device to be used<size>         number of blocks to be used on the device-V, --verbose      explain what is being done;specifying -V more than once will cause a dry-run-V, --version      display version information and exit;-V as --version must be the only option-h, --help         display this help text and exit

命令选项说明

device	预备检查的硬盘分区,例如:/dev/vda1
-t	给定文件系统的型式,Linux 的预设值为 ext2
-V	详细显示模式
-c	在制做文件系统前,检查该partition 是否有坏轨
-l bad_blocks_file	将有坏轨的block资料加到 bad_blocks_file 里面
block 	给定 block 的大小

 

四 tar 压缩与解压缩

在Linux系统中,tar命令用于创建、查看、提取和解压 tar 存档文件。以下是 tar 命令的一些常见用法:

压缩文件或目录:

tar -czvf archive.tar.gz /path/to/directory # 压缩目录为 .tar.gz 格式的文件tar -czvf archive.tar.gz file1 file2 file3 # 压缩多个文件为 .tar.gz 格式的文件tar -cjvf archive.tar.bz2 /path/to/directory # 压缩目录为 .tar.bz2 格式的文件tar -cjvf archive.tar.bz2 file1 file2 file3 # 压缩多个文件为 .tar.bz2 格式的文件tar -cJvf archive.tar.xz /path/to/directory # 压缩目录为 .tar.xz 格式的文件tar -cJvf archive.tar.xz file1 file2 file3 # 压缩多个文件为 .tar.xz 格式的文件

选项说明:

  • -c: 创建新的归档文件
  • -z: 使用 gzip 格式压缩/解压缩
  • -j: 使用 bzip2 格式压缩/解压缩
  • -J: 使用 xz 格式压缩/解压缩
  • -v: 显示详细信息
  • -f: 指定归档文件名

解压文件:

tar -xzvf archive.tar.gz # 解压 .tar.gz 格式的文件tar -xjvf archive.tar.bz2 # 解压 .tar.bz2 格式的文件tar -xJvf archive.tar.xz # 解压 .tar.xz 格式的文件tar -xvf archive.tar # 解压 .tar 格式的文件

选项说明:

  • -x: 提取文件
  • -z: 解压 gzip 格式
  • -j: 解压 bzip2 格式
  • -J: 解压 xz 格式
  • -v: 显示详细信息
  • -f: 指定要解压的文件名

查看归档文件内容:

tar -tvf archive.tar.gz # 查看 .tar.gz 归档文件内容tar -tvf archive.tar.bz2 # 查看 .tar.bz2 归档文件内容tar -tvf archive.tar.xz # 查看 .tar.xz 归档文件内容tar -tvf archive.tar # 查看 .tar 归档文件内容

插入一段自动化脚本:

#!/bin/sh  
# This script checks for the existence of /dev/sda1 and executes a user-defined startup script if it does.  LOG_FILE="/tmp/udisk.log"  
MOUNT_POINT_USB="/mnt/usb1_1/factory.sh"  
MOUNT_POINT="/tmp/udisk" 
SCRIPT_PATH="$MOUNT_POINT/factory.sh"  
DEVICE="/dev/sda1"  
DEVICE_USB_DIR="/mnt/usb1_1"
DEVICE_USB_DIR_MNT="/mnt"
count=1# Log start of script execution  
echo "udisk_script_exec start" >> "$LOG_FILE"  # Determine if the USB drive exists &&
# Check if the device exists and is a block device  
if [ -b "$DEVICE" ]; then  echo "$DEVICE exists" >> "$LOG_FILE"#Waiting to load the USB drive fileecho "count=$count" >> "$LOG_FILE"  while ! [ -f $MOUNT_POINT_USB ]dosleep 3date >> "$LOG_FILE" count=$((count+1))	if [ $count -eq 6 ]; thenbreakfidoneecho "count=$count" >> "$LOG_FILE"  # Create the mount point if it doesn't exist  mkdir -p "$MOUNT_POINT"  # cp filecp "$MOUNT_POINT_USB" "$MOUNT_POINT"# Mount the device  #mount "$DEVICE" "$MOUNT_POINT" # Ensure the script is executable # 检查文件是否存在if [ -f "$SCRIPT_PATH" ]; thenecho "文件 $SCRIPT_PATH 存在" >> "$LOG_FILE"  	        # 尝试更改权限,并检查结果chmod +x "$SCRIPT_PATH"if [ $? -eq 0 ]; thenecho "chmod命令执行成功,已为$SCRIPT_PATH赋予了执行权限。" >> "$LOG_FILE"  elseecho "chmod命令执行失败,请检查当前用户是否真的有权限更改$SCRIPT_PATH的权限。" >> "$LOG_FILE"  fielseecho "文件 $SCRIPT_PATH 不存在。" >> "$LOG_FILE"  fi# Check if the script is executable and run it  if [ -x "$SCRIPT_PATH" ]; then  bash "$SCRIPT_PATH"echo "factory.sh run success" >> "$LOG_FILE"  else  echo "factory.sh is not executable" >> "$LOG_FILE"  fi  # Optionally, you can uncomment the following lines to unmount and remove the mount point  # umount "$MOUNT_POINT"  # rmdir "$MOUNT_POINT"  else  #echo "$DEVICE does not exist" >> "$LOG_FILE" echo "$MOUNT_POINT_USB文件目录不存在" >> "$LOG_FILE" # 定义日志文件路径,并确保路径有效且存在#LOG_FILE=/tmp/udisk.log# 检查日志文件路径是否存在,如果不存在则创建if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"fi# 运行命令并重定向输出到日志文件echo "Starting the command execution at $(date)" >> "$LOG_FILE"result="`sidbg 3 webd  on`"cnt=1echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1while [ "$result" != "upmod is set on now. " ]; doresult="$(sidbg 3 webd on)"cnt=$((cnt+1))	    doneecho "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1# 显示命令执行结果echo "Command execution finished at $(date)" >> "$LOG_FILE"
fi  if [ ! -f "$SCRIPT_PATH" ]; thenecho "$SCRIPT_PATH文件不存在" >> "$LOG_FILE" # 定义日志文件路径,并确保路径有效且存在#LOG_FILE=/tmp/udisk.log# 检查日志文件路径是否存在,如果不存在则创建if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"fi# 运行命令并重定向输出到日志文件echo "Starting the command execution at $(date)" >> "$LOG_FILE"result="`sidbg 3 webd on`"cnt=1echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1while [ "$result" != "upmod is set on now. " ]; doresult="$(sidbg 3 webd on)"cnt=$((cnt+1))	    doneecho "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
fi#------------------------------------------------
# 检查日志文件路径是否存在,如果不存在则创建
if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"
fi# 定义配置文件路径  
CONFIG_FILE="/etc/config_file.txt"  
#将文件转换成Unix格式
dos2unix "$CONFIG_FILE"chmod 666 "$CONFIG_FILE" 
#读取文件里面的每一个值
# 获取 upmode 的值
UPMODE="$(grep 'upmode=' "$CONFIG_FILE"  | cut -d "=" -f2)"# 获取 upmode_off 的值
UPMODE_OFF="$(grep 'upmode_off=' "$CONFIG_FILE" | cut -d "=" -f2)"# 获取 upmode_on 的值
UPMODE_ON="$(grep 'upmode_on=' "$CONFIG_FILE" | cut -d "=" -f2)"# 输出结果
echo "upmode: $UPMODE" >> "$LOG_FILE"
echo "upmode_off: $UPMODE_OFF" >> "$LOG_FILE"
echo "upmode_on: $UPMODE_ON" >> "$LOG_FILE"
# 定义要修改的值及其新值  
declare -A modifications  
if [ $UPMODE = "True" ]; thenecho "相等" >> "$LOG_FILE"
elseecho "不相等" >> "$LOG_FILE"
fiif [ $UPMODE = "True" ] && [ $UPMODE_OFF = "False" ] && [ $UPMODE_ON = "True" ]; thenecho "need to set upmode_off is true" >> "$LOG_FILE"modifications["upmode"]="True"  modifications["upmode_off"]="True"  modifications["upmode_on"]="True"  elif [ $UPMODE = "True" ] && [  $UPMODE_OFF == "True" ] && [ $UPMODE_ON == "True" ]; thenecho "upmode is set UPMODE_ON UPMODE UPMODE_OFF all is false" >> "$LOG_FILE"modifications["upmode"]="False"  modifications["upmode_off"]="False"  modifications["upmode_on"]="False"  
elseecho "need to set upmode  successful" >> "$LOG_FILE"
fi# 读取配置文件并修改值  
while IFS="=" read -r var value || [[ -n "$value" ]]; do  # 检查是否需要修改此变量  if [[ -n ${modifications["$var"]} ]]; then  # 更新变量的值  new_value=${modifications["$var"]}  echo "$var=$new_value"  else  # 如果不需要修改,则原样输出  echo "$var=$value"  fi  
done < "$CONFIG_FILE" > "${CONFIG_FILE}.tmp"  # 将修改后的内容移回原文件  
mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE"  echo "Values have been updated in the file: $CONFIG_FILE" >> "$LOG_FILE"# End of script logging  
echo "udisk_script_exec end" >> "$LOG_FILE"

参考链接:Linux下的fdisk指令详解_linux fdisk-CSDN博客

Linux磁盘管理与文件系统(二):实用工具和命令、fdisk分区示例-CSDN博客

Linux命令之fdisk --磁盘分区工具-CSDN博客

mount命令最新详细教程-CSDN博客

【Linux命令】fdisk 相关分区命令_fdisk查看分区信息-CSDN博客

linux下tar命令的压缩和解压详细使用方法_linux tar解压缩-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 时序必读论文09|ICLR24基于Transformer 自适应多尺度patch的时序预测模型
  • 路径规划——D*算法
  • 【Go】十五、分布式系统、Consul服务注册发现、Nacos配置中心搭建
  • 效率神器来了:AI工具手把手教你快速提升工作效能
  • Doris相关记录
  • RabbitMQ的Direct Exchange模式实现的消息发布案例
  • GameGen-O:大模型颠覆3A游戏开发
  • chrome浏览器如何设置自动播放音视频
  • 动态代理相关知识点
  • 如何从github中克隆指定文件夹
  • 打包部署若依(RuoYi)SpringBoot后端和Vue前端图文教程
  • Gitlab 中几种不同的认证机制(Access Tokens,SSH Keys,Deploy Tokens,Deploy Keys)
  • 209.长度最小的子数组(滑动窗口类)
  • Proteus 仿真设计:开启电子工程创新之门
  • 基于深度学习的信号滤波:创新技术与应用挑战
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • interface和setter,getter
  • Javascript弹出层-初探
  • Laravel 中的一个后期静态绑定
  • MobX
  • opencv python Meanshift 和 Camshift
  • Redash本地开发环境搭建
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Unix命令
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 服务器之间,相同帐号,实现免密钥登录
  • 好的网址,关于.net 4.0 ,vs 2010
  • 记一次和乔布斯合作最难忘的经历
  • 浅谈Golang中select的用法
  •  一套莫尔斯电报听写、翻译系统
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • (13)Hive调优——动态分区导致的小文件问题
  • (21)起落架/可伸缩相机支架
  • (a /b)*c的值
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (算法设计与分析)第一章算法概述-习题
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .Net 4.0并行库实用性演练
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .net专家(高海东的专栏)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @Service注解让spring找到你的Service bean
  • [2019红帽杯]Snake
  • [AAuto]给百宝箱增加娱乐功能