OSX: diskutil命令-转换成自由空间并再对其分区
声明:本文涉及的操作非常可能会破坏你的系统文件,造成数据丢失。请谨慎模仿,一切后果作者均不承担不论什么责任。
目的:
尽管说比較熟悉diskutil命令和它的GUI前端程序磁盘工具(Disk Utility),由于有时须要对磁盘分区进行操作。那么在前端使用磁盘工具比較方便。并且不easy出错。但是有时须要远程或者通过诸如ssh来处理。特别是对多个机器同一时候操作的情况下,总不能显得自己那么的笨手笨脚的吧。
每一个公司甚至是每一个办公室,总有那么一个人难对付,那老兄要求帮忙,顺便给你来一句:要是给我管理员权限,这个我在家常常做。他不就是认为自己牛逼嘛。你会的他也会,看不起咱么。
假设不让他领教一下厉害,就让他抓住把柄了还!再说,仅仅能通过GUI来做的,恨不得是个年轻人都会不是,年轻的时候谁没有玩过电脑啊。
所以,掌握独门之计,不被常人所知的技艺,让他都不知道怎么做到的,他才干服。不用多。来个两次。他就不炸刺儿了,你也就立住脚了。
那都是题外话,那些也不是咱摆弄机器的动力。
这次就是想使用命令行diskutil命令来完毕两个工作:
一是把一个无用的分区,转化为没有被使用的空暇的空间。
在磁盘工具中就是点-号来删除一个分区。
二是把磁盘上一个空暇空间,分配出一个分区。
在磁盘工具中就是点+号来生成一个分区。
并且,一个原则是,不能破坏其它分区和里面的数据。
概况:
既然是要使用diskutil命令。就来看看它能干什么。以下列出的功能仅仅限于本篇实用和相关的几个。
diskutil命令支持的功能:
对磁盘的操作:
- eraseDisk:擦除整个磁盘
- partitionDisk:给一个磁盘分区
对分区的操作:
- eraseVolume:擦除一个分区/卷
- reformat:给一个分区又一次格式化
- resizeVolume:改变一个分区的大小
- splitPartition:把一个分区分成多个小分区
- mergePartitions:把多个分区合并
你看。没有一个功能是说能直接完毕咱们上面两个任务的。
一些常识:
整理一下他的基本常识概念。
1. OS X系统内置支持的分区类型。能够用命令来列出,做到心中有数:
- $ diskutil listFilesystems
- Formattable file systems
- These file system personalities can be used for erasing and partitioning.
- When specifying a personality as a parameter to a verb, case is not considered.
- Certain common aliases (also case-insensitive) are listed below as well.
- -------------------------------------------------------------------------------
- PERSONALITY USER VISIBLE NAME
- -------------------------------------------------------------------------------
- ExFAT ExFAT
- Free Space Free Space
- (or) free
- MS-DOS MS-DOS (FAT)
- MS-DOS FAT12 MS-DOS (FAT12)
- MS-DOS FAT16 MS-DOS (FAT16)
- MS-DOS FAT32 MS-DOS (FAT32)
- (or) fat32
- HFS+ Mac OS Extended
- Case-sensitive HFS+ Mac OS Extended (Case-sensitive)
- (or) hfsx
- Case-sensitive Journaled HFS+ Mac OS Extended (Case-sensitive, Journaled)
- (or) jhfsx
- Journaled HFS+ Mac OS Extended (Journaled)
- (or) jhfs+
它说了,个性化的名称是大写和小写不敏感的。
使用也是简单明了,比方jhfs+或者JHFS+或者“Journaled HFS+”都是一样的。也能够使用人可识别的名称,比如%Applie_HFS%。可是这些名称必须是系统可识别的。详细有哪些,还不清楚。
另一种使用UUID的方式就是指定分区类型的UUID, 这个UUID能够是GPT定义好的,或者是随意的,这个方式比較灵活。
由于仅仅有Apple HFS的分区才支持无损的变更分区大小的操作,所以后面都使用JHFS+。
2. 描写叙述分区的三个參数:Format(格式) Name(名称) Size(大小)。
它们被叫做分区三联式(Triplet)。
三联式中的每一个部分都使用空格分开。当中,格式在前面已经说了;名称非常明显,就是字符串。能够用“”来说明。大小能够是以下的几种形式:
- 浮点数后跟B,K(10^3)),M(10^6)),G(10^9),T(10^12),P(10^15),E(10^18)等(单位是字节Byte),用来表述xxMB/GB/TB的空间大小
- 浮点数后跟S(512字节区块),Ki(2^10)),Mi(2^20)),Gi(2^30),Ti(2^40),Pi(2^50),Ei(2^60)等(单位是字节Byte),用来表述xxMB/GB/TB的空间大小
- DBS是指使用设备内定的区块大小,通常是512字节。只是要依据设备而定。所以不经常使用。
- 浮点数后跟%,用来表述占用磁盘空间的百分比
- R,是说全部剩余空间。在多个分区三联式中,它不一定非得是最后一个。但仅仅能有一个(It need not be in the last triplet. It must only appear in at most one triplet among all triplets.)。
3. 我们经常使用的命令:
查看当前磁盘分区情况: diskutil list
查看某一个分区的详细信息:diskutil info disk1s2
4. 设备: 能够是四种形式,每种形式依据命令的需求不同。适用于不同的情况。
- 设备描写叙述符(device identifier): 看上去类似disk1s3
- 设备节点(device node): 看上去是/dev/disk1s3
- 分区载入点(Volume mount point):默认的类似于 /Volumes/My_Partition
- UUID(通用唯一标识符): 看上去类似11111111-2222-3333-4444-555555555555
工作环境:
使用不论什么一个U盘进行尝试,样例中用的是1GB的U盘. 来做三个分区一个空暇空间,第一个是25%空间的exFAT分区DOS。后面是300MiB的空暇空间,然后是100MB的JHFS+分区A,最后是全部剩余空间分配指JHFS+分区B.
- $ diskutil partitionDisk disk1 GPT exFAT DOS 25% free whatIam 300Mi JHFS+ A 100M JHFS+ B R
- Started partitioning on disk1
- Unmounting disk
- Creating the partition map
- Waiting for the disks to reappear
- Formatting disk1s1 as ExFAT with name DOS
- Volume name : DOS
- Partition offset : 2048 sectors (1048576 bytes)
- Volume size : 507904 sectors (260046848 bytes)
- Bytes per sector : 512
- Bytes per cluster: 4096
- FAT offset : 128 sectors (65536 bytes)
- # FAT sectors : 512
- Number of FATs : 1
- Cluster offset : 640 sectors (327680 bytes)
- # Clusters : 63408
- Volume Serial # : 53c9fdc4
- Bitmap start : 2
- Bitmap file size : 7926
- Upcase start : 4
- Upcase file size : 5836
- Root start : 6
- Mounting disk
- Formatting disk1s2 as Mac OS Extended (Journaled) with name A
- Initialized /dev/rdisk1s2 as a 95 MB HFS Plus volume with a 512k journal
- Mounting disk
- Formatting disk1s3 as Mac OS Extended (Journaled) with name B
- Initialized /dev/rdisk1s3 as a 349 MB HFS Plus volume with a 8192k journal
- Mounting disk
- Finished partitioning on disk1
- /dev/disk1
- #: TYPE NAME SIZE IDENTIFIER
- 0: GUID_partition_scheme *1.0 GB disk1
- 1: Microsoft Basic Data DOS 260.0 MB disk1s1
- 2: Apple_HFS A 100.0 MB disk1s2
- 3: Apple_HFS B 366.0 MB disk1s3
尝试1:
是否能用resizeVolume把一个分区的大小变成0来达到使之变成空暇空间呢?
咱们先来复制一个文件到分区A中,在来尝试以下命令:
- $ diskutil resizeVolume disk1s3 0B
- Started partitioning on disk1s3 A
- Verifying the disk
- Checking file system
- Checking Journaled HFS Plus volume
- Checking extents overflow file
- Checking catalog file
- Checking multi-linked files
- Checking catalog hierarchy
- Checking extended attributes file
- Checking volume bitmap
- Checking volume information
- The volume A appears to be OK
- Resizing
- Finished partitioning on disk1s3 A
- /dev/disk1
- #: TYPE NAME SIZE IDENTIFIER
- 0: GUID_partition_scheme *1.0 GB disk1
- 1: Microsoft Basic Data DOS 260.0 MB disk1s1
- 2: Apple_HFS A 100.0 MB disk1s2
- 3: Apple_HFS B 366.0 MB disk1s3
能够看到,根本没有作用。
事实上前面已经说了resizeVolume是一种非破坏性的操作。
操作1:
好了,前面卖了个官司,事实上使用这个命令就好了,特别简单。
- $ diskutil eraseVolume free NONE disk1s3
- Started erase on disk1s2
- Unmounting disk
- Error: 2: POSIX reports: No such file or directory
尽管看上去有个错误。那是由于自由空间无法被装载。所以没有问题。
操作2:
如今来看看怎样把空暇空间费配称一个可用的分区。
一种方法最简单,假设磁盘上的数据都不须要了,那么又一次分区(diskutil partitionDisk)最最简单直接。
但是假设要保存数据呢?而经过上面的分析。你能够看到,空暇空间不会被分配一个设备,也就是没有UUID, 没有设备描写叙述符。没有节点。没有载入点。什么都没有,就没有直接打方式。
只是能够“曲线救国”,利用resizeVolume再splitPartition来达到目的。比方把上图中A分区后面的分配回给B。能够这样做:
- #resizeVolume limits -> get Current Size
- newVol="B"
- currentSize=`diskutil resizeVolume disk1s2 limits | grep "Current" | awk '{print $3$4}'`
- currentVol=`diskutil list disk1 |grep "disk1s2" | awk '{print $3}'`
- #resizeVolume to Rest:
- diskutil resizeVolume disk1s2 R
- #splitePartition:
- diskutil splitPartition disk1s2 2 JHFS+ $currentVol $currentSize JHFS+ $newVol R
GPT分区:
使用Diskutil list查看磁盘分区状况。并不能反应出空暇空间的状况。所以须要使用另外一个命令来解释:
- $ sudo gpt -r show disk1
- Password:
- start size index contents
- 0 1 PMBR
- 1 1 Pri GPT header
- 2 32 Pri GPT table
- 34 2014
- 2048 507904 1 GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
- 509952 612624
- 1122576 195312 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
- 1317888 714784 3 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
- 2032672 2
- 2032674 32 Sec GPT table
- 2032706 1 Sec GPT header
操作3:
前面有时卖关子,由于什么呢?比方前面那个在DOS分区后和A分区前的那部分空暇空间就不好办,由于前面的DOS分区不可改变分区大小,或者其它复杂状况,更是难以处理。而有了上面对GPT分区表的了解,真正能够处理的方法在这里了。
最简单的方法是:
- diskutil unmountDisk force disk1
- sudo gpt add disk1
- diskutil unmountDisk force disk1
- sudo diskutil eraseVolume JHFS+ C disk1s4
- diskutil mountDisk disk1
- diskutil unmountDisk force disk1
- sudo gpt remove -b 1122576 disk1
- sudo gpt remove -b 1317888 disk1
- sudo gpt add -b 509952 -s 612624 disk1
- sudo gpt add -b 1122576 -s 195312 disk1
- sudo gpt add -b 1317888 -s 714784 disk1
- diskutil unmountDisk force disk1
- sudo diskutil eraseVolume JHFS+ C disk1s2
- diskutil mountDisk disk1
Ref:
OSX: diskutil命令-转换成自由空间并再对其分区的更多相关文章
- curl命令转换成php源码
curl命令转换成php源码 获取状态: curl -X GET -H "Content-Type:application/json" -H "Authorization ...
- json中把非json格式的字符串转换成json对象再转换成json字符串
JSON.toJson(str).toString()假如key和value都是整数的时候,先转换成jsonObject对象,再转换成json字符串
- CHM文件命令转换成html
在Windows下chm转换为html的超简单方法(反编译CHM文件的方法) 通过调用Windows命令,将chm 文件转换为html 文件. 方法: 命令行(cmd),输入hh -decompile ...
- 控制台程序的中文输出乱码问题(export LC_CTYPE=zh_CN.GBK,或者修改/etc/sysconfig/i18n为zh_CN.GBK。使用setlocale(LC_CTYPE, "");会使用默认办法。编译器会将源码做转换成Unicode格式,或者指定gcc的输入文件的编码参数-finput-charset=GBK。Linux下应该用wprintf(L"%ls/n",wstr))
今天发现用securecrt登陆时,gcc编译出错时会出现乱码,但直接在主机的窗口界面下用Shell编译却没有乱码.查看了一下当时的错误描述,发现它的引号是中文引号,导致在SecureCRT中显示出错 ...
- 前台 JSON对象转换成字符串 相互转换 的几种方式
在最近的工作中,使用到JSON进行数据的传递,特别是从前端传递到后台,前台可以直接采用ajax的data函数,按json格式传递,后台Request即可,但有的时候,需要传递多个参数,后台使用requ ...
- mysql 字段类型VARCHAR转换成DECIMAL
在我们写代码的实际业务中,有时候实体类用的是String,数据库中自然是VARCHAR类型,但是如果这个实体的属性值放的是数字类型,你查询的时候又需要对它进行排序.sql怎么写呢. 别担心mysql提 ...
- JavaScript 将当地时间转换成其它时区
毫无疑问,用JavaScript脚本可以通过直接查看用户的时钟,方便地在网页上显示本地时间. 但是,如果你想显示不同地区的时间—--例如,如果你的本部在别的国家,你想查看“本国”时间而非当地时间,又该 ...
- 用Linux/Unix命令把十六进制转换成十进制(转)
那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...
- iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)
iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...
随机推荐
- Vue—事件修饰符
Vue事件修饰符 Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation(). Vue. ...
- perl学习一:探索Perl世界
1.perl4种变量 scalar: $ 纯变量,标量array: @hash: %file: 大写 2.变量组成 1.命名规则 大小写敏感 . 字母数字下划线...2.无关键字,$+其他,但不可以与 ...
- Day07 数据类型(列表,元组,字典,集合)常用操作和内置方法
数据类型 列表list: 用途:记录多个值(同种属性) 定义方式:[]用逗号分隔开多个任意类型的值 list()造出来的是列表,参数是可迭代对像,也就是可以使用for循环的对像 传入字典,出来的列表元 ...
- 【Oracle】使用dblink+minus方式迁移数据
一.需求说明 1.数据库a104的表syssde.a4_syssde_department中有1000条数据: 2.数据库a230的表syssde.a4_syssde_department中有800条 ...
- Windows phone UI虚拟化和数据虚拟化(一)
今天和大家分享一些关于windows phone ui虚拟化和数据虚拟化的一些知识. 也顺便回答我上一篇[LongListSelector 控件 在 wp7 和wp8中的不同之处]里,留下的那个问题, ...
- CodeIgniter实现读写分离
http://pengbotao.cn/codeigniter-mysql-proxy.html
- jsp jstl标签库 el表达式
一.JSTL标签是什么? 提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言. 同时还提供了格式化数据和日期的方法.实现这些功能需要I18N格式标签库(I18N-c ...
- 在myeclipse中使用查找功能
1.全局搜索(快捷键:ctrl+H) 在弹出对话框中选File Search选项,然后在第一个文本框中粘贴(我一般用粘贴)或自已手动录入(容易写错)要查找的字符串(可以是英文字符也可以是汉字),在第二 ...
- php5.3.3版本前后变化中php-v和sbin/php-fpm -v
重装php-fpm试试,遂去http://php-fpm.org/download/想下载个新版本的php-fpm, 结果发现版本大于5.3.3的PHP内部已经集成了php-fpm,不用再另行安装了. ...
- Java类方法 类变量
类变量就是静态变量,类方法就是静态方法. 在理解类变量.类方法之前先看一段代码: class Person{ int age ; String name; static int totalFee; p ...