`回顾:
mount/umount,fstab配置文件,ext系列文件系统基础原理,read,bash
/etc/fstab的六个字段:
自左向右:挂载设备,挂载带点,文件系统类型,选项,转储频率,自检次序
ext系列文件系统:
super block,GDT,inode table,block bitmap,inode bitmap
查看超级块:
dumpe2fs -h,tune2fs -l
硬链接:
因为是指向inode的,所以硬链接不能跨文件系统,不能给目录指向硬链接, 每做一个硬链接文件的硬链接数都加1
软链接:文件类型显示为“l”,没有大小的概念,可以指向目录,可以跨文件系统, 目标文件消删除后,符号链接文件就失效了。
RAID:
全称:Redundant Arrays of Indexpensive Disks(廉价冗余磁盘阵列)
由于现在的磁盘很贵,所以将“inexpensive”改成了单词“Independent”,所以现在的 RAID也被称为(独立冗余磁盘阵列)
(磁盘阵列有什么用呢?或者为什么会有这么一个组件?
比方说我们现在有一块硬盘正在使用,这上面存放了一些非常重要的数据,那万一这个磁盘发生了损坏,至少我们在这块磁盘上跑的一个非常重要的业务就终止了,也就是说磁盘的损坏会导致业务的终止,进而就会导致磁盘上的重要的数据丢失,早期的时候他的硬盘速率,他的I/O非常慢,单块硬盘的I/O能力非常有限,一般来讲现在的机械式硬盘像SATA接口的大概7200转那样的硬盘他们的I/O能力每秒大约在70到90个或到100个之间,每秒只能产生这么多次的读写操作,而对于我们现在的固态硬盘,他的读的能力大概在400个上下每秒钟。而写的能力大概在200个上下每秒钟,但是这些对于我们那些数据访问非常密集型场景来讲,这种I/O能力是极其有限的,比如像那种中型的互联网公司,比方说美团,大众点评这样的组织,他们的数据读写能力,客户的每次下单浏览,再加上内部的查询操作,由此看出他们的I/O要求的能力是非常高的,如果这个时候他们的I/O能力无法突破的话,带来的结果就是我们的业务全线都会受到影响,如果一个网站用户体验很差,那么就会几乎没有用户,对于一个网站来讲没有用户访问,那就没有价值,所以我们就想办法去突破这种单块磁盘或者单块I/O的能力有限的限制,事实上现在有很多非常高级的,固态硬盘访问机制。
我们硬盘刚刚诞生初期的时候,硬盘就有两种分类,一种是我们IDE接口的硬盘,后来又有SCSI接口的在企业级应用的,他那时候提高I/O能力是通过提高转速来实现的,比方说SCSI硬盘的每分钟的转速大概是一万五千转,有一万的,也有一万五千的,所以他的I/O能力有限,但事实上这种I/O能力的提升也就是150个到200而已,提升也不会特别的明显,尽管如此,SCSI硬盘也是很昂贵的,因为虽然SCSI硬盘的提升能力有限,但是他的耐用性,却提升了很多,而那时候却有不少的的企业用不起这样的硬盘的,所以说就有了美国加州大学伯克利分校的一个教授,通过研究后就发表了一盘论文<>,在论文中就阐述了用多块廉价的硬盘按照某种特的结构组织起来作为一设备使用,从而能够根据我们不同的组合方式提高其I/O能力,或者提高其耐用性等特性。只不过后来人们发现RAID带给我们的效用,其实不仅仅是那些廉价的或者希望廉价来解决的企业,需要,就连后来用的起那些SCSI硬盘的企业和组织,也逐渐采用RAID这这种技术来改造他们的SCSI硬盘,将多块SCSI硬盘组织起来,组成一块物理硬盘来使用,其实这种做法也是再一次对SCSI硬盘的效能和耐用性做了进一步的提升。后来为了让这些硬盘组织起来更加的高效,他们需要一个更好的硬件层次所实现的硬件控制器。比方说我们在当前主机上直接上了一块硬盘的话,我们知道我们的硬盘有SATA口或者IDE口,那主板上应该有IDE控制器,那么现在我们将多块硬盘组织成一块硬盘来使用,那我们应该怎么办呢?也就意味着在IDE控制器,多个控制器的背后,还需要一个新的控制器能够将这都个控制器组织成一个,并且二者之间还能通过协议进行通信。更重要的是他的传输带块足够大,才可以,所以后来他发现设计这么一个控制器如果我们能够给他组织成高效的组织的话,其实他也相当的不廉价,一个控制器在现在几千块人民币也是很平常的,所以我们说这个廉价的概念早就不用了。但是这个名字却被人已经接受所以人们就做了个折中,所以人们就做了一个“独立冗余磁盘阵列”
)
所谓的RAID就是将多块硬盘按照某种格式组织起来当一块物理硬盘使用的技术
这种技术主要由两个特性:
第一:提高I/O性能
磁盘并行读写
第二:提高耐用性
磁盘冗余来实现
但是RAID在组织硬盘时用到了不同的技术,也就是说的不同的级别:
RAID有级别的概念:
这每一个级别分别表示了组织磁盘的格式不同,或者说多块磁盘组织在一起的工作方式有所不同;这个我们称之为级别
其实RAID也有多种实现方案,刚才讲的硬件控制器就是一种实现方案,其实我们也可以在软件级别实现,只不过软件级别实现这种方式通常不建议在生产环境中使用,
(RAID实现方式,外接式磁盘阵列,这个时候我们只需在我们的主机上给他提供一个专门的控制器,可以连接在PCI或者PCI-E的接口上,做一个扩展卡,大家知道我们的当前主机我们一旦接一个控制卡,或者接一个控制器,应该这样说,任何硬件的通信接口在主板上有对应的硬件集成的话,这种我们把它叫做控制器,叫control,如果源没有带控制器,那我们又需要用到这种技术,就想声卡一样,如果没有声卡我们额外的加一个卡片,通过PCI或者PCI-E的槽进行扩展,这个扩展的卡一般被称为适配器。外接式磁盘阵列,就可能通过这种扩展卡片,通过一些线缆连接至外部的存储的专用的磁盘阵列上来,一大堆的存储设备,这是一种。
第二种我们用所谓的 内接式磁盘阵列,我们主板上集成了RAID控制器,还有一种就是我们的计算机压根就不支持,硬件不支持,但是我们可以使用纯软件的方式来实现RAID)
RAID实现方式:
(1)外接式磁盘阵列;通过扩展卡提供适配能力
(2)内接RAID:主板集成RAID控制器
(2)Software RAID;
这篇论文说明了我们可以将廉价的硬盘比如IDE的硬盘d多块按照某种特定结构给组织起来,当做一个设备来使用,从而能够根据我们不同的组合方式提高其I/O能力,或者提高其耐用性等特性。
对于外接式RAID还是内接式RAID,我们是先做好系统再做RAID,还是我们先做RAID再做安装系统,这其实是根据我们的实际需要和磁盘个数其实我们将来可以这样做,比如说我们的主机上有5块硬盘,我们可以那一块硬盘装操作系统,剩余的4块做RAID来存储数据,这其实是一种方案,当然我们还可以将全部磁盘全做成RAID,然后在装操作系统时,我们再分一个区出来就行,其他的区用来存储数据。这样也是可以的。我们可以在RAID级别之上再使用卷管理机制,来实现划分区的,但是我们来想像一下,如果操作系统上没有,那我们如果去配置多块硬盘去实现做RAID呢?
我们要注意:硬件RAID的配置接口并不在操作系统上,而是在BIOS中在控制器上,外接式,内接式硬件这种硬件级别的RAID,应该是在BIOS界面中实现的,那也就是意味着在安装操作系统之前,我们如何使用RAID,将哪些硬盘组织成什么级别的RAID,我们都应该事先规划好的,另外硬件是RAID,我们知道各个生产厂商都有可能生产,无非就是生产一个控制器,但是他们有一个问题,那都是生产RAID,但是不同的公司生产的硬件RAID性能不同,性能是否可靠,是否好,这样卖价就会高,事实上既然RAID是为了提高I/O能力和耐用性的,对于RAID来讲耐用性的实现,主要是通过磁盘的冗余来实现。I/O能力的提高是通过多块硬盘的并行读写实现。
并行读写来提高I/O能力是有限的,所以有些RAID生产厂商就采用了一种非常精巧的设计方式,就给RAID控制器额外添加了内存,其实RAID控制器有自己的CPU,可能这个CPU的性能并不高,有自己内存,有自己的IO,这些都是RAID自己的,这也是RAID卡片为什么很贵的原因了,就像手机一样他是一个独立的设备,能够实现各种独立自我控制的功能,既然这样,我们可以添加一块内存进来,这个内存跟我们的主机内存是两回事,他是专门用于RAID内存的,我们往RAID上存数据,RAID控制器收到以后直接存内存里了,而且告诉你存完了,这性能多好,那么这样一来会带来一个缺陷,万一这个时候操作系统断电了,他本来告诉你存好了,我们也认为他的确是存好了,但是等下次去找的时候,发现没有数据,但是提供内存后,确实是让我们整个磁盘阵列的性能大幅提升,那为了避免系统没电,那么我们只要再提供额外供电就解决系统有时候断电的情况了。也就是有备用电池,当我开机以后,会给电池充电,但是突然断电以后,我们发现我们的这个额外的电池还在给我们的RAID供电,他至少能够保证RAID内部那个CPU芯片控制把内存的数据同步到磁盘上,等到电能耗尽停电为止,当然我们也可以理解为关机。等到下一次开机以后,很显然电池没电了,也不能保证下次再断电时,数据保证恢复了,所以就是正常时就往电池充电,所以以后去买RAID控制器时,尤其是有这种内存的,我们一定要检查他有没有额外供电的功能或电池。
RAID的工作方式:
RAID级别并不是有什么性能高低上下之分也不是谁比谁更OK,这个级别仅用于磁盘组织形式上的不同的。所以说RAID的级别仅仅是一个代称而已。
级别:level
RAID级别:有0-6各个级别,其实还有7这个级别只是不常见而已。
RAID-0:0,还有个称呼叫:条带卷,英文名称:strip;
RAID-1:1,还有个称呼叫:镜像卷,英文名称:mirror;
RAID-2:2 //其实RAID-2,3,4都不常用;
.....
RAID-5:
RAID-6:
RAID-10 //将RAID-1和RAID-0组合起来
RAID-01 //将RAID-0和 RAID-1组合起来
RAID-0:就是将多块硬盘平行的组织起来,当一块硬盘来实现I/O并行磁盘组织的结构
(假设我们现在有两个硬盘,我们需要存储一段数据,我们磁盘结构就是,磁盘上面为控制器我们可以把要存储的数据,这个数据流提请到这个磁盘控制器上,控制器在往下磁盘中存储数据的时候,他首先将数据切割成多块,注意这个块和我们文件系统的块不是一回事,因为还没有到文件系统上,没到磁盘上呢,所以他跟文件系统的块不是一回事,而是这个RAID控制为了把一个数据分成很多份,分散存储在这两块硬盘中,所以这个块有多大,是我们的控制器自行的分隔机制来决定的,而这个被分割成的数据部分,叫做“chunk”,而不叫“block”对于RAID-0来讲就是将这个数据分割成n块以后,平均分散到这些磁盘上去,所以第一块就给我第一个磁盘,第二块同时并行分给了第二块磁盘,这就说明了两个磁盘分别存储了一般的数据,当一个硬盘来用。那么本来10G的数据,这样一来背个磁盘只需吞吐5G就可以了,那么这么看来就发现I/O整体有提升。这种机制我们就成为“条带机制”但是RAID-0没有提升耐用性,反而是下降了。因为,本来一块硬盘的耐用是1,但是一两个放在一起,耐用性就成了50%,因为里那个快盘都不能坏,才能保持数据有效。所以这种机制特别不适合存储关键数据。那RAID-0这种设备适合做什么?可以做swap,也可以做临时文件系统。像一些缓存服务器的缓存系统,还要注意:只要关机了,缓存是一定要重建的。但是以后我们还真不能将缓存服务器的缓存数据放到这上面来,因为,我们的系统可能没有因为断电而关机,是因为磁盘坏了一块,数据丢了,我们知道如果是关键性业务的数据放在这上面,磁盘坏了一块,我们的业务就没法进行下去了,那个业务就要终止,当数据不重要时,也不意味着我们就能使用RAID-0,因为他的业务未必不重要,磁盘坏了导致业务终止,后果也是严重的。以后讲到的缓存系统是至关重要的,尤其是缓存坏掉,达到一个临届点以后,会导致我们的整个系统雪崩的。所以缓存系统也是一个非常重要的系统。这就是RAID-0的特性。)
RAID-0:
读,写性能提升;
可用空间:N*min(S1,S2,.....) //假设:如果有三块硬盘,分别为S1,S2,S3, 并且大小为10G,20G,30G,那么他们能够做成RAID 的每个磁盘上能用的空间也就是10G,所以我们做 RAID时,我们要看磁盘中空间最小的那个。所以 这里乘以min
无容错能力
最少磁盘数:2,2+;
(对于RAID-1而言他也同样需要存储几块数据,也同样至少需要两块硬盘来组织,假设一个数据分成了4个chunk,那么每一块硬盘上都要对这四个chunk进行存储一份,所以将来第一块硬盘坏了,或者第二块硬盘坏了,只要是二者不同时坏,坏了其中一块硬盘,那么数据还是会正常读写的,所以RAID-1是允许一块硬盘坏掉,但是对于我们的存储空间的利用率就没有那么高了,只有原来的一般,写的性能没有提升,相反一块chunk要写两次,相比较写的性能下降了,但是读的时候,我们可以分散读,这样的话我们的读性能是由些提高的,)
RAID-1:
读性能提升,写性能略有下降;
可用空间:1*min(S1,S2,.....) //如果两个硬盘一个10G,一个20G,那么我们的 可用空间就是10G,因为我们的数据是需要存储两 份的。
有冗余能力
最少磁盘数:2,2+ //一般我们也只会用两个做RAID-1
RAID-1和RAID-0是两个极端,我们要想综合一下0和1的功能,那就使用RAID-2,3,4由于RAID-2和RAID-3不常用,所以我们直接说RAID-4,RAID-4来讲至少是需要3块硬盘,将3块或者3块以上的磁盘组织成RAID-4,然后我们存数据时,其中有一块盘专门用来存储校验码,其他的盘用来存储数据,所以当我们有一个数据需要存储时,仍然将数据切割成chunk,第一个磁盘上存储chunk1,第二块磁盘上存储chunk2,然后第三块磁盘上存储chunk1和chunk2的校验码,这个校验码一般是chunk1和chunk2的异或值,异或运算,就是相同为零,不同为1,例如:1101与1010异或运算:结果为:0111,那么这样就是当其中存储数据的硬盘坏掉后,我们可以根据另外硬盘上的数据和校验码将坏的硬盘上的数据算出来。但是RAID-4不允许多块硬盘坏掉。问题:在RAID-4中,其中一块存储数据的硬盘被拿掉了,那么我们其实还是能够读取数据的,只是每次读取要进行校验罢了。但是这样带来的结果是另外两块盘损坏的风险加大,两个盘的压力也变大,就像这种坏掉一块硬盘后,我们仍然让他在线工作的机制,这种机制我们成为降级模式。其实不仅可以读,其实连写都是可以做的,但是这个时候的风险很大,所以这个时候,我们应该赶紧找一块新的硬盘替换坏的盘。
RAID-4还有一个缺陷就是,他专门用一块盘存出校验码,那么这个存放校验的盘的压力比前面存数据的盘压力都大。很容易成为性能瓶颈。
我们怎样近早知道是哪一块硬盘坏掉了呢?
有些RAID控制器内部有定制的监控功能,比如说他的每一块磁盘都有一个对应的指示灯,可能原本正常的时候为绿色灯,但是当这块硬盘坏掉后,指示灯的颜色就变成了×××。来指示磁盘坏掉。但是磁盘坏掉的时候我们刚好在睡觉,怎么办?我们为了解决这样的问题我们可以开发一个监控工具,这个监控工具时刻扫描磁盘,有些RAID控制器可以让我们多接一块硬盘,用来做数据的热备,就想RAID-4需要三块硬盘,但是我们现在给他接四块硬盘,只是这第四块硬盘平时不用,我们叫他为空闲盘,当其他盘坏掉后,这个盘立即顶上去。
RAID-4:
是由3块或者3块以上的磁盘组织成RAID。
最大的缺陷就是用一个盘来存储校验码,
(RAID-4他最大的缺陷就是用一块磁盘专门来存储校验码。所以RAID-5就采用了每个盘都存储校验码的机制,也就是说如果用3块硬盘来存储数据,那么第一块盘用来存第一块数据,第二块盘用来存第二块数据,第三块盘用来存校验码;然后第3块数据存第二块盘,第4块数据存储第三块盘,校验码就放在第一块盘。这样他们就是轮流做校验盘,但是这种存放格式会出现一种结果,就是先把第一块盘做校验盘,还是将最后一块磁盘做校验盘。那么我们可以将校验码作为一个对称线,这个对沉先,如果是从左向右一次升高那么就叫左对称,对脚线如果是从左向右一次降低就是又对称。一般我们都使用RAID-5的左对称。)
RAID-5:
读写性能提升
可用空间:(N-1)*min(S1,S2,....)
有容错能力:允许坏掉一块硬盘
最少磁盘是:3,3+
(RAID-5其实是由缺陷的,因为毕竟他只允许坏掉一块硬盘,我们知道一堆硬盘中坏掉一块硬盘的可能性还是极大的,坏两块磁盘的可能性也是很大的,所以我们这时就用RAID-6,用两块盘做校验盘,也称为循环校验,因此我们的校验码将会存两次,所以RAID-6至少需要4块硬盘,其实用4块盘组织做RAID-6时,其实他的真正利用率为50%,其实RAID-5跟RAID-6的磁盘利用率还是很高的。)
RAID-6:
读写性能提升
可用空间:(N-2)*min(S1,S2......)
有容错能力:2块磁盘
最少磁盘数:4,4+
RAID-10:就是先两两一组做成RAID-1,然后再将这个RAID-1再做成RAID-0,其实这句话是这样理解,我们先将硬盘两两组合做成镜像,然后再对这组之间做条带。就是当存储一个数据的时候,我们往不同组中存储不同的数据,然后这个数据在每个组中又进行一次镜像,这种结构是我们目前最常用的结构。
混合类型RAID:
RAID-10:
读写性能提升
可用空间:N*min(S1,S2,....)/2
有容错能力,每组镜像最多只能坏1块;
最少磁盘数4个
RAID-01:
RAID-50
最少使用6个磁盘
RAID7
JBOD:just a Bunck of Distks
将多块磁盘的空间合并一个大的连续空间使用;
可用空间:sum(S1,S2......)
常用级别:
RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,
实现方式:
硬件实现方式
外接式
内接式
软件实现方式
centos6上的软件RAID的实现:
结合内核中的md()这个模块实现的。
mdadm:模式化的工具
命令的语法格式:
mdadm [mode]
支持的RAID级别:
LINEAR,RAID0,RAID1 RAID4 RAID5 RAID6 RAID10;
模式:
创建:-C
装配:-A
监控:-F
管理:-f ,-r,-a
例:/dev/md1
注意:
做RAID 我们可以用分区或者整个磁盘来做,但是我们在做RAID-0或者RAID-1的话,我们用同一块磁盘上不同分区是没有意义的,他既不能提升IO,也不能提升冗余。因为硬盘坏了,那么多个分区也就坏了。
再次提醒以后我们做RAID,单独的一块硬盘用来做RAID,再怎样也要使用不同磁盘上的不同分区来做RAID
-C:创建模式
-n#:使用#个块设备来创建次RAID
-l#:指明要创建的RAID级别
-a{yes|no}:表示是否自动创建目标RAID设备的设备文件。
-c CHUNK_SIZE:指明块大小
-x #:指明空闲盘的个数;
-D:显示raid的详细信息;
mdadm -D /dev/md#
管理模式:
-f:标记指定磁盘为损坏
-a:添加磁盘
-r:移除磁盘
观察md的状态:
cat /proc/mdstat
停止md设备:
mdadm -S /dev/md#
watch命令:
-n #:刷新间隔,单位是秒;
watch -n# 'COMMAND'
例如:创建一个10G可用的RAID5;
解:
分析,如果RAID5可用空间是10G,根据RAID5的组织结构,我们知道创建成功,最少使用3块硬盘,并且每块硬盘我们可以都是5G。那么加起来可用空间就是10G
所以:
第一步:
首先添加3块5G的硬盘,或者在已有的不同硬盘上分出3个5G来。仅作为演示效果,我们就可以在一块硬盘上分出三个5G大小的分区,但是我们要想再加一个备用硬盘,那么我们就分4个5G大小的分区。
用到的命令:
fdisk /dev/sd#
p
n
+5G
分区创建完成后,我们要想使用软RAID,那么借助l命令,将分区的类型调整为fd Linux raid auto
然后保存退出后,由于在已经有分区的磁盘设备上在进行分区,那么我们需要让内核重读分区表:partx -a /dev/sd#
第二步:
我们可以先查看本机是否有RAID设备,用命令
cat /proc/mdstat
[root@centos6~]# cat /proc/mdstat //查看所有md类型的设备状态
Personalities:
unuseddevices:
[root@centos6~]#
或者使用命令查看/dev/目录下是否有md设备
[root@centos6~]# ls /dev | grep"md"
[root@centos6~]#
创建RAID
mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda{7,8,9,10}
创建完成后,我们可以再次执行命令:cat /proc/mdstat
第三步:
创建完RAID后,这就相当于我们分区完成了,要存储还需要格式化,下面就格式化所创建的RAID:
mke2fs -t ext4 /dev/md0
第四步:
格式化完成后,我们就创建一个文件,然后将这个RAID进行挂载到这个文件下,我们就可以使用这个空间了。
mkdir /mydtat
mount /dev/sd0 /mydata
mount 查看挂载状态
df -lh 查看分区的大小
第五步:
我们要想其开机就自动挂载,那么就将其写进/etc/fstab文件中
我们使用blkid查看/dev/md0的UUID
blkid /dev/md0
注意我们最好使用UUID的格式挂载,因为在下次重启以后这个md0的名字可能会变化的。我们在格式化的时候我们可以使用e2label来管理卷标。
严重RAID的容错:
这是创建的RAID5那么我们现在验证将其中的一个磁盘搞坏一个,然后看看还能不能用。
可以使用命令先查看md0的详细信息:
mdadm -D /dev/md0
mdadm /dev/md0 -f /dev/sda7 //标记/dev/sda7损坏
cat /proc/mdstat //发现他会重新做同步
我们可以使用watch命令,来规定多长时间自动执行后面的命令
watch -n1 'cat /proc/mdstat' //表示每一秒钟执行一下后面的命令
ctrl+c是退出watch的监控
mdadm -D /dev/md0 //查看创建的RAID设备的详细信息
我们可以将RAID上坏掉的硬盘移除,使用-r选项
mdadm /dev/md0 -r /dev/sda7
将修复的磁盘加进RAID中使用-a选项
mdadm /dev/md0 -a /dev/sda7
问题:
我们有了RAID1和RAID10以后,我们还需要数据备份吗?
需要备份,RAID仅是避免磁盘损坏导致数据丢失,而人为损害的数据就不能恢复,RAID仅仅是磁盘为自己提供磁盘冗余的。
练习1:创建一个可用空间为10G的RAID0设备,要求chunk大小为128K,文件系统为ext4,有一个空闲盘,开机自动挂载至/backup目录;
练习2:创建一个可用空间为10G的RAID10设备,要求chunk大小为256K,文件系统为ext4,开机自动挂载至/mydata目录;
练习:
1.创建一个20G的文件系统,块大小为2048,文件系统类型为etx4,卷标为TEST,要求此分区开机后,自动挂载至/testing目录,且默认有acl挂载选项;
(1)创建20G分区
(2)格式化:
mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE
(3)编辑/etc/fstab文件
LABEL='TEST' /testing ext4 defaults,acl 0 0
2.创建一个5G的文件系统,卷标HUGE,要求分区开机自动挂载至/mogdata目录,文件系统类型为ext3;
3.写一个脚本,完成如下功能:
(1)列出当前系统识别到的所有磁盘设备;
fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]"
(2)如磁盘数量为1,则显示其空间的使用信息;
否则,则显示最后一个磁盘上的空间使用信息;
disks=$(fdisk-l | grep -o "^Disk/dev/[sh]d[a-z]" | wc -l)
if [ $disks -eq 1 ];then
fdisk -l /dev/[sh]da
else
fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep-o "^Disk /dev/[sh]d[a-z]" | tail -1 | cut -d ' ' -f2)
fi