磁盘分区
背景
问题主要来源于同事电脑突发状况,最后确定硬盘出毛病了。
后面从其他机器换了一块机械硬盘上去,居然识别不了,bios里面识别不了,一度以为磁盘又坏了。
后面用转接线接到USB口,读取磁盘。在windows系统的磁盘管理中,可以看到磁盘,但没有分区出来,显示没有初始化,需要初始化,点击初始化后,也无法初始化成功。
一开始想到可能分区出问题了,网上找了些资料也没有解决。然后突然想到会不会是系统缘故,可能之前用在linux系统上,导致无法windows系统无法识别。
插到linux系统上,一看,/dev/sdx出来了,mount挂载也顺利,能创建文件,啥问题也没有,所以大概率是linux文件系统和windows文件系统差别的缘故,一折腾也可能把磁盘引导分区也弄出问题了。
然后想到之前,自己在安装windows和linux系统时,也遇到过类似的问题,那是由于对磁盘所在的系统很明确了,也很快就处理了。具体细节却想不起来了,大致情况就是,安装过xxx系统上的磁盘在安装另一个系统时无法识别,然后直接将磁盘抠出装到其他机子上,用个啥命令将磁盘的所有分区给删除了。
Windows删除分区
这里找了下以前的记录,只剩下几个冷冰冰的操作命令:
//输入diskpart命令
> diskpart
//磁盘信息
> list disk
//选择磁盘号
> sel disk [num]
//列出分区
> list partition
//选择分区
> sel partition [num]
//删除分区
> delete partition override
磁盘分区
第一个扇区
重要的放在前面,第一个扇区记录了磁盘分区表,开始的时候这个分区表称MBR,后面为了适应磁盘的大容量需求,增加了新的分区格式为GPT。
磁盘小于2TB,默认使用MBR,大于则默认使用GPT。
BIOS也需要读取MBR/GPT里面的启动引导程序,设备才能完成启动。
文件系统
内容略过。
windows系统一般使用ntfs,linux一般使用ext4
Linux磁盘分区
存储设备
IDE的磁盘的文件名为 /dev/hd[a-d]
SCSI、SATA、USB的磁盘文件名为 /dev/sd[a-p]
//列出所有存储设备
$ lsblk
//查看块设备的文件系统类型及UUID (fs)
$ lsblk -f
查看分区
//查看硬盘信息及分区
$ sudo fdisk -l
分区模式
//指定硬盘,进入分区模式
$ sudo fdisk /dev/<sdx设备>
- 查看帮助:m
- 创建分区:n
- 1、选择主分区或者扩展分区
- 2、选择分区编号
- 3、按照默认,选择上一个分区的结束大小作为开始大小
- 4、+<分区大小>,分配的空间大小
- 5、查看分区:p
- 6、保存:w
格式化
//格式化为ext4文件系统
$ sudo mkfs.ext4 /dev/<sdx设备>
磁盘空间使用
//列出文件系统的整体磁盘使用量(disk free)
$ df -h
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
//检查磁盘空间使用量(disk used)
$ du
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :仅显示指定目录或文件的总大小,而不显示其子目录的大小。
-S :包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
挂载
临时挂载
1、创建挂载点目录
//创建要挂载的文件夹
$ mkdir [文件夹目录及名称]
2、挂载分区
//挂载到指定目录
$ sudo mount /dev/<sdx设备> <挂载点目录>
3、卸载挂载
//根据挂载设备卸载挂载
$ umount /dev/<sdx设备>
//根据挂载点目录卸载挂载
$ umount <挂载点目录>
永久挂载
//查看块设备的文件系统类型及UUID (fs)
$ lsblk -f
//进入fstab配置,并修改配置
$ sudo vim /etc/fstab
白折腾
回到最开始的背景上来,同事电脑被判定硬盘异常的中途中,用到了三块硬盘,容量分别时1T、500G和80G。
情况比较曲折,简单来说就是换个硬盘就好了,然后又不行了,最后所有硬盘都不行了,临时买了个固态,2小时送上门,256G,就装了个固态重装下系统就好了,也没有反反复复开不了机的情况(卡死在BIOS界面)。
对此,我觉得太难以相信。硬盘没有其他的错误操作。好端端的怎么会坏呢?最后拿来了工具(SATA转USB工具)测试。
在windows系统中,1T的硬盘,删除分区,重新格式化了,最后能正常识别显示。
剩下500G和80G的,来回在windows和linux系统下折腾。主要现象为在linux系统中可以显示并使用,在windows上无法识别,就认定为是windows系统无法识别linux下的分区格式导致的。(而且插上硬盘,再给windows开机时,也卡在了BIOS界面,把硬盘拔了,就可以正常启动)
用80G的硬盘不断测试,主要就是在linux系统上使用fdisk、gdisk工具重建分区表, 重新分区,并格式化为ntfs,修改分区标志。将网上的教程试了一个遍,总之就是linux中正常,windows上异常,可以识别到磁盘时,但操作不了(尝试初始化时提示,IO设备错误无法运行此项请求),要么介质受写入保护。
然后突然想到会不会USB 扩展接口问题,接到主机的后面USB呢?
好吧,居然这这个问题卡了这么长时间(关键是已经有了一个磁盘成功的案例,第一时间没有往这方面去想)。
换上后面的USB口后,磁盘管理器上,虽然在LINUX已经为磁盘新建了分区,WINDOWS并不认账,将原分区删除,重新建一个分区,然后快速格式化一下。
解决了。本来丢垃圾桶的两块硬盘,又可以继续它们的牛马生活了,负重前行。
格式化为ntfs
ntfs为windows系统使用的文件系统,在格式化前需要安装ntfs-3g
//安装ntfs-3g
$ apt-get install ntfs-3g
//格式化为ntfs-3g
$ mkfs.ntfs /dev/sdx(磁盘设备的名称)
注意没有分区的设备无法格式化,格式化前先分区。如果设备已挂载,需要取消挂载再格式化。
(这块异常的磁盘500G,分区时默认使用linux文件系统,然后格式化成ntfs时,用很长时间)
纯GPT模式
有种说法,linux的gdisk工具将硬盘设置为了MBR/GPT的混合模式。导致windows无法识别。可以转为“纯GPT”格式。
操作如下:
//安装gdisk工具
$ apt-get install gdisk
$ gdisk -l /dev/sdx(目标分区)
可以看到分区信息为:MBR:hybrid
使用x进行扩展功能
进入扩展功能后,使用n,产生protective MBR
最后w保存并退出
重新使用gdisk -l /dev/sdx,检查发现信息变为:MBR:protective
试过这个操作,但是有没效果不清楚。毕竟最后一块硬盘没有这个操作,只是简单换成主机后面的USB口接入。
但是protective的意思为“保护”,这样是表示“纯GPT”,会不会导致磁盘被保护呢?(磁盘被保护,需要解除才能操作)
WIN解除写保护
参考前面章节中的“Windows删除分区”,select disk x 后
运行“ attributes disk”可以查看磁盘的基本属性(只读状态等信息)
清除写保护
//清除磁盘写保护
$ attributes disk clear readonly