【Linux命令大全】008.磁盘维护之sfdisk命令(实操篇)
【Linux命令大全】008.磁盘维护之sfdisk命令实操篇✨ 本文为Linux系统磁盘维护命令的全面汇总与深度优化结合图标、结构化排版与实用技巧专为高级用户和系统管理员打造。(关注不迷路哈)文章目录【Linux命令大全】008.磁盘维护之sfdisk命令实操篇一、功能与作用二、基本用法1. 显示磁盘分区信息2. 备份分区表3. 恢复分区表4. 显示分区大小5. 更改分区类型6. 创建新的分区表三、高级用法1. 从脚本创建分区2. 使用JSON格式定义分区3. 复制分区表到另一个磁盘4. 创建GPT分区表5. 在自动化脚本中使用sfdisk6. 使用sfdisk进行高级分区操作四、实用技巧与常见问题实用技巧常见问题五、总结一、功能与作用sfdisk命令是Linux系统中一个强大的磁盘分区工具主要用于创建、修改和显示分区表。与传统的交互式分区工具如fdisk不同sfdisk是一个非交互式命令行工具特别适合在脚本中使用或进行自动化分区操作。它支持多种分区表格式包括传统的MBRMaster Boot Record和较新的GPTGUID Partition Table。sfdisk命令在系统安装、磁盘管理和自动化部署中具有以下重要作用创建和管理磁盘分区表备份和恢复分区表在脚本中进行自动化分区操作复制分区表从一个磁盘到另一个磁盘支持多种分区表格式包括MBR和GPT参数详解参数说明-d显示分区表详情-l列出所有磁盘的分区信息-s显示分区大小-c更改分区类型-f强制操作-n不执行操作只显示结果-u设置单位二、基本用法1. 显示磁盘分区信息使用sfdisk命令查看指定磁盘的分区表信息# 显示/dev/sdb的分区表信息sudosfdisk -l /dev/sdb# 输出示例# Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors# Units: sectors of 1 * 512 512 bytes# Sector size (logical/physical): 512 bytes / 4096 bytes# I/O size (minimum/optimal): 4096 bytes / 4096 bytes# Disklabel type: dos# Disk identifier: 0x12345678## Device Boot Start End Sectors Size Id Type# /dev/sdb1 2048 41943039 41940992 20G 83 Linux# /dev/sdb2 41943040 83886079 41943040 20G 83 Linux# /dev/sdb3 83886080 125829119 41943040 20G 83 Linux2. 备份分区表使用sfdisk命令备份磁盘的分区表到文件# 备份/dev/sdb的分区表到文件sudosfdisk -d /dev/sdb/backup/sdb_partition_table.bak# 查看备份文件内容cat/backup/sdb_partition_table.bak# 输出示例# # partition table of /dev/sdb# unit: sectors## /dev/sdb1 : start 2048, size 41940992, type83# /dev/sdb2 : start 41943040, size 41943040, type83# /dev/sdb3 : start 83886080, size 41943040, type833. 恢复分区表使用之前备份的分区表文件恢复磁盘分区表# 从备份文件恢复/dev/sdb的分区表sudosfdisk /dev/sdb/backup/sdb_partition_table.bak# 输出示例# Checking that no-one is using this disk right now ... OK## Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors# Units: sectors of 1 * 512 512 bytes# Sector size (logical/physical): 512 bytes / 4096 bytes# I/O size (minimum/optimal): 4096 bytes / 4096 bytes# Disklabel type: dos# Disk identifier: 0x12345678## Old situation:## Device Boot Start End Sectors Size Id Type# /dev/sdb1 2048 41943039 41940992 20G 83 Linux# /dev/sdb2 41943040 83886079 41943040 20G 83 Linux# /dev/sdb3 83886080 125829119 41943040 20G 83 Linux## New situation:## Device Boot Start End Sectors Size Id Type# /dev/sdb1 2048 41943039 41940992 20G 83 Linux# /dev/sdb2 41943040 83886079 41943040 20G 83 Linux# /dev/sdb3 83886080 125829119 41943040 20G 83 Linux## The partition table has been altered.# Calling ioctl() to re-read partition table.# Syncing disks.4. 显示分区大小使用sfdisk命令显示特定分区的大小# 显示分区大小以块为单位sudosfdisk -s /dev/sdb1# 输出示例# 41940992# 显示所有分区的大小sudosfdisk -s5. 更改分区类型使用sfdisk命令更改现有分区的类型# 将/dev/sdb3的分区类型更改为Linux交换分区类型82sudosfdisk -c /dev/sdb382# 验证更改是否生效sudosfdisk -l /dev/sdb6. 创建新的分区表使用sfdisk命令创建新的分区表# 创建一个新的空分区表警告这会删除所有现有分区sudosfdisk --wipealways /dev/sdb三、高级用法1. 从脚本创建分区sfdisk最强大的功能之一是可以从脚本或文本文件中创建分区。以下是一个简单的例子# 创建一个定义分区的文本文件cat/tmp/partitions.txtEOF # partition table of /dev/sdb unit: sectors /dev/sdb1 : start 2048, size 41940992, type83 /dev/sdb2 : start 41943040, size 83886080, type83 /dev/sdb3 : start125829120, size 41943040, type82 EOF# 应用分区表sudosfdisk /dev/sdb/tmp/partitions.txt这个例子创建了三个分区一个20GB的Linux分区一个40GB的Linux分区和一个20GB的交换分区。2. 使用JSON格式定义分区在较新版本的sfdisk中支持使用JSON格式定义分区# 创建一个JSON格式的分区定义文件cat/tmp/partitions.jsonEOF { partitiontable: { label: dos, id: 0x12345678, device: /dev/sdb, unit: sectors, partitions: [ { start: 2048, size: 41940992, type: 83, bootable: true }, { start: 41943040, size: 83886080, type: 83 }, { start: 125829120, size: 41943040, type: 82 } ] } } EOF# 应用JSON格式的分区表sudosfdisk --json /dev/sdb/tmp/partitions.json3. 复制分区表到另一个磁盘可以使用sfdisk命令将一个磁盘的分区表复制到另一个磁盘# 将/dev/sdb的分区表复制到/dev/sdc警告这会覆盖/dev/sdc上的所有数据sudosfdisk -d /dev/sdb|sudosfdisk /dev/sdc# 验证复制是否成功sudosfdisk -l /dev/sdc4. 创建GPT分区表sfdisk命令也支持创建和管理GPT分区表# 创建GPT分区表sudosfdisk --labelgpt /dev/sdb# 创建一个GPT分区定义文件cat/tmp/gpt_partitions.txtEOF # partition table of /dev/sdb unit: sectors /dev/sdb1 : start 2048, size 41940992, type8300 /dev/sdb2 : start 41943040, size 83886080, type8300 /dev/sdb3 : start125829120, size 41943040, type8200 EOF# 应用GPT分区表sudosfdisk /dev/sdb/tmp/gpt_partitions.txt# 验证GPT分区表sudosfdisk -l /dev/sdb对于GPT分区表分区类型代码略有不同Linux分区使用8300交换分区使用8200。5. 在自动化脚本中使用sfdisk以下是一个更完整的示例展示如何在自动化部署脚本中使用sfdisk#!/bin/bash# 自动分区脚本DISK_DEVICE/dev/sdbROOT_PARTITION_SIZE20GHOME_PARTITION_SIZE40GSWAP_PARTITION_SIZE8GLOG_FILE/var/log/autopartition.log# 记录日志函数log(){echo[$(date)]$1$LOG_FILE}# 检查是否以root权限运行if[$(id-u)!0];thenecho错误请以root权限运行此脚本exit1filog开始自动分区操作$DISK_DEVICE# 检查磁盘是否存在if[!-b$DISK_DEVICE];thenlog错误磁盘设备$DISK_DEVICE不存在exit1fi# 卸载磁盘上的所有挂载点log正在卸载磁盘上的所有挂载点...formount_pointin$(mount|grep$DISK_DEVICE|awk{print $3});doumount$mount_pointlog已卸载$mount_pointdone# 备份当前分区表如果有BACKUP_FILE/backup/${DISK_DEVICE##*/}_partition_table_$(date%Y%m%d%H%M%S).baklog正在备份当前分区表到$BACKUP_FILE...mkdir-p /backup sfdisk -d$DISK_DEVICE$BACKUP_FILE# 创建分区定义文件PARTITION_FILE/tmp/${DISK_DEVICE##*/}_partitions.txtlog正在创建分区定义文件$PARTITION_FILE# 转换分区大小为扇区数SECTOR_SIZE512# 假设扇区大小为512字节# 计算各分区的扇区数ROOT_SECTORS$(($(numfmt--fromiec $ROOT_PARTITION_SIZE)/$SECTOR_SIZE))HOME_SECTORS$(($(numfmt--fromiec $HOME_PARTITION_SIZE)/$SECTOR_SIZE))SWAP_SECTORS$(($(numfmt--fromiec $SWAP_PARTITION_SIZE)/$SECTOR_SIZE))# 计算分区起始位置ROOT_START2048# 默认从2048扇区开始HOME_START$((ROOT_STARTROOT_SECTORS))SWAP_START$((HOME_STARTHOME_SECTORS))# 创建分区定义cat$PARTITION_FILEEOF # partition table of$DISK_DEVICEunit: sectors${DISK_DEVICE}1 : start$ROOT_START, size$ROOT_SECTORS, type83, bootable${DISK_DEVICE}2 : start$HOME_START, size$HOME_SECTORS, type83${DISK_DEVICE}3 : start$SWAP_START, size$SWAP_SECTORS, type82 EOF# 显示分区计划echo\n 分区计划 cat$PARTITION_FILEecho\n注意此操作将覆盖$DISK_DEVICE上的所有数据read-p确认继续吗(y/N) CONFIRMif[[!$CONFIRM~^[Yy]$]];thenlog用户取消了分区操作。rm-f$PARTITION_FILEexit0fi# 应用分区表log正在应用分区表...sfdisk --force$DISK_DEVICE$PARTITION_FILEif[$?-eq0];thenlog成功分区表应用完成# 重新读取分区表partprobe$DISK_DEVICE# 格式化分区log正在格式化分区...# 格式化根分区mkfs.ext4 -L root${DISK_DEVICE}1# 格式化家目录分区mkfs.ext4 -L home${DISK_DEVICE}2# 格式化交换分区mkswap-L swap${DISK_DEVICE}3# 显示结果log分区操作完成新的分区表sfdisk -l$DISK_DEVICE$LOG_FILEelselog错误分区表应用失败exit1fi# 清理临时文件rm-f$PARTITION_FILElog自动分区脚本执行完成# 显示结果摘要echo\n 分区结果摘要 sudosfdisk -l$DISK_DEVICEecho详细日志请查看$LOG_FILEecho分区表备份文件$BACKUP_FILE6. 使用sfdisk进行高级分区操作以下是一些sfdisk的高级分区操作示例# 显示分区表的详细信息包括扩展分区和逻辑分区sudosfdisk -d /dev/sdb# 创建一个带扩展分区的分区表cat/tmp/extended_partitions.txtEOF # partition table of /dev/sdb unit: sectors /dev/sdb1 : start 2048, size 41940992, type83, bootable /dev/sdb2 : start 41943040, size209715200, type5 /dev/sdb5 : start 41945088, size 41940992, type83 /dev/sdb6 : start 83886080, size 41943040, type83 /dev/sdb7 : start125829120, size 41943040, type82 EOFsudosfdisk /dev/sdb/tmp/extended_partitions.txt在这个例子中我们创建了一个主分区/dev/sdb1、一个扩展分区/dev/sdb2以及在扩展分区中创建了三个逻辑分区/dev/sdb5、/dev/sdb6和/dev/sdb7。四、实用技巧与常见问题实用技巧使用扇区对齐提高性能对于现代硬盘特别是SSD和高级格式化硬盘正确的扇区对齐可以提高性能和延长使用寿命# 确保分区从2048扇区开始这是大多数现代分区工具的默认设置# 2048扇区 1MB这是大多数现代存储设备的最佳对齐单位使用partprobe重新读取分区表在修改分区表后使用partprobe命令让内核重新读取分区表避免需要重启系统# 修改分区表后重新读取sudosfdisk /dev/sdbpartitions.txtsudopartprobe /dev/sdb使用numfmt转换大小单位在脚本中可以使用numfmt命令在不同的存储单位之间进行转换# 将GB转换为扇区数假设扇区大小为512字节SECTORS$(numfmt --fromiec20G--to-unit512)echo20GB $SECTORS扇区查看支持的分区类型使用sfdisk命令查看所有支持的分区类型代码# 查看所有支持的分区类型sudosfdisk --list-types使用–wipe选项安全擦除在创建新分区表之前可以使用--wipe选项安全擦除旧的分区表# 在创建新分区表前擦除旧的分区表sudosfdisk --wipealways /dev/sdb常见问题无法应用分区表问题描述执行sfdisk命令时出现Device or resource busy或Partition table busy错误。解决方法确保磁盘没有被挂载sudo umount /dev/sdb*确保没有进程正在使用该磁盘lsof | grep /dev/sdb使用--force参数强制应用分区表分区表损坏问题描述磁盘分区表损坏导致无法识别分区。解决方法从备份恢复分区表sudo sfdisk /dev/sdb partition_table.bak使用testdisk等工具尝试恢复损坏的分区表如果没有备份且数据不重要可以重新创建分区表分区大小与预期不符问题描述创建的分区大小与指定的大小不符。解决方法确保正确计算扇区数注意扇区大小可能是512字节或4096字节使用-u参数明确指定单位sudo sfdisk -u M /dev/sdb以MB为单位GPT分区表问题问题描述在GPT分区表上操作时遇到问题。解决方法确保使用--labelgpt参数创建GPT分区表注意GPT分区表使用的类型代码与MBR不同例如Linux分区是8300而不是83对于复杂的GPT分区操作考虑使用gdisk命令主分区数量限制问题描述无法创建超过4个主分区。解决方法这是MBR分区表的限制最多只能有4个主分区创建3个主分区和1个扩展分区然后在扩展分区中创建多个逻辑分区或者使用GPT分区表它没有这个限制五、总结sfdisk命令是Linux系统中一个功能强大的磁盘分区工具特别适合在脚本和自动化场景中使用。通过本文的详细介绍和实例相信您已经掌握了sfdisk命令的基本用法和高级技巧包括如何查看分区信息、如何备份和恢复分区表、如何从脚本创建分区、如何复制分区表等。在实际工作中sfdisk常用于系统安装、批量部署和磁盘管理等场景。使用时请注意以下几点始终以root权限运行命令操作前备份重要数据确保磁盘未被挂载了解MBR和GPT分区表的区别和限制以及正确计算分区大小和位置。记住分区操作具有一定的风险性可能导致数据丢失。在进行任何分区操作之前请务必备份所有重要数据并确保您了解自己正在执行的操作

相关新闻

纺织设备远程监控运维管理平台方案

纺织设备远程监控运维管理平台方案

在纺织行业蓬勃发展的今天,纺织机械作为生产线的核心装备,其稳定运行直接关系到生产效率和产品质量。然而,随着纺织企业规模的扩大和设备的多样化,传统运维方式已难以满足现代纺织生产的需求。该平台通过高度兼容的技术架构&#…

2026/7/4 16:37:44 阅读更多 →
什么是回归测试,冒烟测试,渗透测试

什么是回归测试,冒烟测试,渗透测试

一、先讲个故事:一栋楼的“三次验收” 假设你是开发商,盖了一栋居民楼,现在要交付给业主住。整个过程里,有三种完全不同的“检查”,分别对应:冒烟测试、回归测试、渗透测试。1. 冒烟测试:交房前…

2026/7/5 22:34:49 阅读更多 →
救命神器!更贴合本科生的AI论文平台,千笔·专业论文写作工具 VS 灵感风暴AI

救命神器!更贴合本科生的AI论文平台,千笔·专业论文写作工具 VS 灵感风暴AI

随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为本科生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生,开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时,市场…

2026/7/3 15:28:42 阅读更多 →

最新新闻

Docker run 命令 6 大核心参数实战:-v、-w、-e、-u、--rm、-it 组合解析

Docker run 命令 6 大核心参数实战:-v、-w、-e、-u、--rm、-it 组合解析

Docker Run 命令 6 大核心参数实战指南:-v、-w、-e、-u、--rm、-it 的组合艺术当你在终端输入docker run的那一刻,一个精密的容器化引擎便开始运作。但真正让这个简单的命令变得强大的,是那些看似不起眼的参数。本文将深入探讨六个最常用却常…

2026/7/6 2:05:46 阅读更多 →
3款轻量级骨架提取模型对比:MobilePose vs Lightweight OpenPose vs MoveNet,移动端实测 20+ FPS

3款轻量级骨架提取模型对比:MobilePose vs Lightweight OpenPose vs MoveNet,移动端实测 20+ FPS

3款轻量级骨架提取模型移动端实测:性能、精度与部署全解析在移动端和边缘计算设备上实现实时人体姿态估计一直是计算机视觉领域的难点。随着AI模型轻量化技术的进步,MobilePose、Lightweight OpenPose和MoveNet等模型让20FPS的实时骨架提取成为可能。本文…

2026/7/6 2:05:46 阅读更多 →
mRemoteNG免费远程连接管理器:3天从零到精通的完整教程

mRemoteNG免费远程连接管理器:3天从零到精通的完整教程

mRemoteNG免费远程连接管理器:3天从零到精通的完整教程 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_mirrors/mr/mRemoteNG …

2026/7/6 2:03:45 阅读更多 →
抖店体验分怎么提升-4点8分实操方法-抖音电商2026规则落地

抖店体验分怎么提升-4点8分实操方法-抖音电商2026规则落地

抖店体验分怎么提升?提升到4.8全套实操方法|抖音电商2026规则落地 前言 2026抖音电商体验分权重重新划定:商品体验50%、服务体验35%、物流体验15%,4.8分是店铺核心分水岭。低于4.8分,千川流量、商品卡自然流权重、平台…

2026/7/6 2:01:44 阅读更多 →
Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议深度兼容性实测报告在工业自动化系统集成领域,多品牌PLC设备的互联互通一直是工程师面临的现实挑战。海为科技最新发布的Cloud SCADA 3版本以"内置多种工业设备驱动"为核心卖点,宣称能够无缝对接西门子、…

2026/7/6 1:59:44 阅读更多 →
数字通信同步技术:3种载波同步方法对比与低信噪比场景实战

数字通信同步技术:3种载波同步方法对比与低信噪比场景实战

数字通信同步技术:3种载波同步方法对比与低信噪比场景实战在数字通信系统中,载波同步是实现可靠数据传输的核心技术之一。当信号经过信道传输后,接收端需要精确恢复发送端的载波频率和相位,才能正确解调出原始信息。尤其在低信噪比…

2026/7/6 1:59:44 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻