linux驱动开发-磁盘管理

news2024/9/21 17:56:35

在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

 插入一段自动化脚本:

#!/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 file
    
	echo "count=$count" >> "$LOG_FILE"  
	while ! [ -f $MOUNT_POINT_USB ]
	do
		sleep 3
		date >> "$LOG_FILE" 
		count=$((count+1))	
		if [ $count -eq 6 ]; then
			break
		fi
	done
	
	echo "count=$count" >> "$LOG_FILE"  
    # Create the mount point if it doesn't exist  
    mkdir -p "$MOUNT_POINT"  
 
  	# cp file
  	cp "$MOUNT_POINT_USB" "$MOUNT_POINT"
  	
    # Mount the device  
    #mount "$DEVICE" "$MOUNT_POINT" 
    
    # Ensure the script is executable 
  	# 检查文件是否存在
	if [ -f "$SCRIPT_PATH" ]; then
	    echo "文件 $SCRIPT_PATH 存在" >> "$LOG_FILE"  	        
	    # 尝试更改权限,并检查结果
	    chmod +x "$SCRIPT_PATH"
	    if [ $? -eq 0 ]; then
	        echo "chmod命令执行成功,已为$SCRIPT_PATH赋予了执行权限。" >> "$LOG_FILE"  
	    else
	        echo "chmod命令执行失败,请检查当前用户是否真的有权限更改$SCRIPT_PATH的权限。" >> "$LOG_FILE"  
	    fi
	else
	    echo "文件 $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" ]; then
	    touch "$LOG_FILE"
	fi
 
	# 运行命令并重定向输出到日志文件
	echo "Starting the command execution at $(date)" >> "$LOG_FILE"
 
	result="`sidbg 3 webd  on`"
	cnt=1
	echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
 
	while [ "$result" != "upmod is set on now. " ]; do
	    result="$(sidbg 3 webd on)"
	    cnt=$((cnt+1))	    
	done
	echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
	# 显示命令执行结果
	echo "Command execution finished at $(date)" >> "$LOG_FILE"
fi  
 
if [ ! -f "$SCRIPT_PATH" ]; then
	echo "$SCRIPT_PATH文件不存在" >> "$LOG_FILE" 
   	
	# 定义日志文件路径,并确保路径有效且存在
	#LOG_FILE=/tmp/udisk.log
 
	# 检查日志文件路径是否存在,如果不存在则创建
	if [ ! -f "$LOG_FILE" ]; then
	    touch "$LOG_FILE"
	fi
 
	# 运行命令并重定向输出到日志文件
	echo "Starting the command execution at $(date)" >> "$LOG_FILE"
 
	result="`sidbg 3 webd on`"
	cnt=1
	echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
 
	while [ "$result" != "upmod is set on now. " ]; do
	    result="$(sidbg 3 webd on)"
	    cnt=$((cnt+1))	    
	done
	echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
fi
 
#------------------------------------------------
# 检查日志文件路径是否存在,如果不存在则创建
if [ ! -f "$LOG_FILE" ]; then
    touch "$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" ]; then
    echo "相等" >> "$LOG_FILE"
else
    echo "不相等" >> "$LOG_FILE"
fi
 
if [ $UPMODE = "True" ] && [ $UPMODE_OFF = "False" ] && [ $UPMODE_ON = "True" ]; then
    echo "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" ]; then
    echo "upmode is set UPMODE_ON UPMODE UPMODE_OFF all is false" >> "$LOG_FILE"
    modifications["upmode"]="False"  
    modifications["upmode_off"]="False"  
    modifications["upmode_on"]="False"  
else
    echo "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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2127539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非线性规划及其MATLAB实现

目录 引言 非线性规划的基本模型 非线性规划的求解方法 非线性规划的MATLAB实现 例子&#xff1a;多目标优化问题的非线性规划求解 表格总结&#xff1a;MATLAB常用非线性规划函数 实例&#xff1a;使用MATLAB求解非线性投资决策问题 结论 引言 非线性规划&#xff08;…

Haskell中的数据交换:通过http-conduit发送JSON请求

无论是客户端与服务器之间的通信&#xff0c;还是服务之间的API调用&#xff0c;都需要一种高效、可靠的方法来传输数据。在众多编程语言中&#xff0c;Haskell以其强大的类型系统和函数式编程特性&#xff0c;为构建可靠和高效的数据交换提供了坚实的基础。本文将介绍如何在Ha…

基于ssm+vue+uniapp的食堂线上预约点餐系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

亚信安慧AntDB-M 只读事务提交优化

一、事务操作介绍 数据库系统一般有三种开启和提交事务方法&#xff1a; 配置autocommit1时&#xff0c;隐式开启事务&#xff0c;每执行一条DML的SQL语句&#xff0c;数据库系统会隐式的自动执行commit逻辑提交事务&#xff0c;不需要用户输入commit执行提交。 配置autocomm…

Qt第三课 ----------按钮的控件属性

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

视频推拉流/直播点播EasyDSS平台安装失败并报错“install mediaserver error”是什么原因?

TSINGSEE青犀视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外&#xff0c;平台还支持用户自行上传视频文件&#xff0c;也可…

openeuler-无法dnf安装包问题

有个openEuler release 22.09系统机器&#xff0c;需要dnf安装些包等 [rootlydb ~]# more /etc/openEuler-release openEuler release 22.09 [rootlydb ~]# dnf -y install lrzsz OS …

【C++】Stack

个人主页~ Stack 一、Stack的介绍和使用1、stack的介绍2、stack的使用3、stack的模拟实现 二、容器适配器1、什么是适配器2、容器适配器的使用 三、deque1、原理介绍2、deque的使用3、deque的缺陷 一、Stack的介绍和使用 1、stack的介绍 stack详细解释 stack是一种容器适配器…

onlyoffice 使用记录(前端开发角度)

前端和Web文档生成器服务器交互 对于与 Web 文档生成器服务的交互&#xff0c;使用 POST 请求。 请求参数在请求正文中以 JSON 格式输入。 请求被发送到 https://documentserver/docbuilder 地址&#xff0c;其中 documentserver 是安装了 ONLYOFFICE 文档服务器的服务器的名称…

创新实验报告VC++案例开发十二生肖的俄罗斯方块智力游戏完整代码设计方案

一&#xff0e;项目名称 十二生肖俄罗斯方块 二&#xff0e;开发背景&#xff1a; 俄罗斯方块是一个很低古老的一个小游戏&#xff0c;到但今日它还有很大的魅力。 三&#xff0e;技术路线或工作原理&#xff1a; 采用的软件及开发平台 Micosoft Visual 6.0 项目的总体方…

1.安卓逆向-说明

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 正常来爬一个app的数据&#xff0c;在没有加密的情况下&#xff0c;就不需要去逆向&#xff0c;app没有加密也就可以正…

SprinBoot+Vue高校就业管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

RickdiculouslyEasy--CTF-综合靶场

废话不多说&#xff0c;一个靶机&#xff0c;好几个flag&#xff0c;开整&#xff01;&#xff01;&#xff01; 使用命令如下&#xff0c;来进行主机发现。 netdiscover -r 172.16.1.10 找到目标靶机 扫描端口 nmap 172.16.1.7 -p 1-65535 依次访问 第一个flag 9090端口 第…

使用CUBE_MX实现STM32 DMA 功能(存储器到存储器)

目录 一、使用DMA实现从存储器1发送数据到存储器2中 1.CUBE_MX配置 2.KEIL5配置 一、使用DMA实现从存储器1发送数据到存储器2中 1.CUBE_MX配置 1.在DMA选项中添加MEMORY TO MEMORY 选择数据宽度&#xff0c;并确保地址递增功能打开。 2.系统时钟72MHz 3.生成代码 2.KEIL5配…

创建Django 项目

创建一个新的 Django 项目&#xff1a; django-admin startproject myproject cd myproject 在 Django 项目中创建一个新的应用&#xff1a; python manage.py startapp myapp设置数据库 编辑 myproject/settings.py 文件中的数据库设置&#xff1a; DATABASES {default:…

研究: 用于训练大型语言模型的数据集往往缺乏透明度

研究人员开发了一种易于使用的工具&#xff0c;使人工智能从业人员能够找到适合其模型目的的数据&#xff0c;从而提高准确性并减少偏差。 这款名为 “数据出处资源管理器”(Data Provenance Explorer) 的新工具可以帮助从业人员在训练模型时对数据做出更明智的选择。 为了训练…

随机规划及其MATLAB实现

目录 引言 随机规划的基本模型 随机动态规划 随机动态规划建模实例​(随机动态规划)&#xff1a; MATLAB中的随机规划实现 示例&#xff1a;两阶段随机规划 表格总结&#xff1a;随机规划求解方法与适用场景 结论 引言 随机规划&#xff08;Stochastic Programming&…

SpringCloud之配置中心svn示例和refresh

SpringCloud之配置中心svn示例和refresh 上一篇配置中心git示例留了一个小问题&#xff0c;当重新修改配置文件提交后&#xff0c;客户端获取的仍然是修改前的信息&#xff0c;这个 问题我们先放下&#xff0c;待会再讲。国内很多公司都使用的svn来做代码的版本控制&#xff…

LabVIEW项目硬件设备选择

在LabVIEW开发项目中&#xff0c;硬件设备的选择至关重要&#xff0c;直接影响系统的性能、稳定性和开发效率。合适的硬件设备不仅能够有效支持项目目标的实现&#xff0c;还能提高整体测试和控制系统的灵活性。因此&#xff0c;从性能需求、兼容性、成本、扩展性等多个角度出发…

vue3 图片裁剪

最终效果 插件下载 pnpm install vue-cropper 配置 在main.js中配置: import VueCropper from vue-cropper; import vue-cropper/dist/index.css;app.use(VueCropper); 组件封装 components/Cropper/index.vue <temp