操作系统

Linux系统硬盘迁移

背景: 原硬盘为UEFI引导,存在EFI和ext4两个分区,Ubuntu系统 目的硬盘为UEFI引导,已经存在一个EFI和NTFS分区,以及一个Windows系统 目标:将原硬盘中的Ubuntu迁移至目的硬盘,组成双系统   首先在目的硬盘中压缩一块空间,格式化为ext4,用来放即将迁移过来的Ubuntu 首先通过U盘启动另一个Linux,插上两块硬盘,分别为/dev/sda,/dev/sdb。可以看到/dev/sda有两个分区,/dev/sdb有三个分区,其中/dev/sd*1为EFI系统。 使用gparted可以看到/dev/sd*1为FAT格式,带有boot标记。那么我们 > mkdir old_efi new_efi old_system new_system > sudo mount /dev/sda1 old_efi    #Ubuntu的引导 > sudo mount /dev/sdb1 new_efi  #Windows的引导 > sudo mount /dev/sda2 old_system   #Ubuntu的系统 > sudo mount /dev/sdb3 new_system #存放Ubuntu系统的位置 > ls old_efi/EFI ubuntu/ > ls new_efi/EFI Microsoft/ > sudo cp -a old_efi/EFI/ubuntu new_efi/EFI #复制引导文件… Continue reading Linux系统硬盘迁移

操作系统

UEFI:文件级别的操作系统

自己个人的操作系统经历了几个阶段,相信大多数人都有所经历 单硬盘,多分区,单操作系统 以前的硬盘很贵容量也小,只有一个多分区Windows 单硬盘,多分区,多操作系统 先在一个分区里装Windows,再在某一个分区里装Linux(安装顺序还不能变),另外留几个分区存文件 多硬盘,每个硬盘多分区,单操作系统 通常是一个硬盘装Windows,里面分几个区,一个是操作系统,其他是各类文件;另一个装Linux,同样的划分 多硬盘,每个硬盘单分区,单操作系统 很快就会发现在一个操作系统下划多个分区没有太大意义,还不能动态调整,不如单个分区,用不同目录来区分数据类型 单操作系统硬盘+单用户数据硬盘 用户数据如视频和课件等往往和文件系统无关,而操作系统有两个,再加上机械硬盘变得便宜,SSD出现。促使我将用户文件与系统分离。每个操作系统单独放一个硬盘,用户文件放其他的硬盘。 这样,我可以任意组合操作系统和文件。并且将操作系统所在的盘随时拔出带走,到一个没有系统的电脑环境下直接插上就可以启动。我将这种模式称之为硬盘级别的操作系统 多操作系统SSD+单用户数据硬盘 随着SSD的普及,在机械硬盘上装系统已经变得无法忍受。而SSD的价格又相对较贵,不得不将多个系统装在同一硬盘里,一切似乎回到了原来,只是HDD换成了SSD。还好UEFI引导和GPT分区技术也同时普及开来,使得操作系统拆分和组合比之前更加容易。 在MBR下,引导存放于硬盘前512位的固定位置。这种固话的地址带来了很多问题。而使用UEFI,每个操作系统的引导都放于硬盘的EFI分区下,可以以文件的形式直接访问。合并两个操作系统到一个盘只需要将操作系统移到该硬盘对应的分区,再将相应的引导文件丢进EFI分区里即可(Linux下需要修改grub.cfg中操作系统分区对应的uuid)。而拆分也只需要删掉对应的引导文件。我将这种方式称之为文件级别的操作系统 这样,操作系统也可以和普通的数据文件一样通过拷贝的方式进行迁移,真是方便至极。

运维

ssh使用

ssh使用SSL非对称加密实现,是保障网络通信安全的重要手段。常见的ssh登录远程服务器和github的代码上传都是使用了ssh协议 非对称加密 不同于传统的用户名/密码的验证方式,ssh使用非对称加密算法来保证安全性。 简单的说,现在有一种加密算法Ek和解密算法Dk,和一对特殊生成的密钥k1,k2。我们可以使用加密算法E和密钥k1来加密一段信息M。即X=Ek1(M)。非对称加密算法特殊的地方在于加密后的信息只能用另一个密钥k2来解开。即M=Dk2( Ek1(M) )。而只有k1的话是只能对信息加密不能解密的。这一过程中的k1和k2可以交换。即M=Dk1( Ek2(M) )。 我们把这两个密钥中的某一个自己偷偷藏着谁也不告诉,叫做私钥,另一个则公开出来,叫做公钥。这就是常说的公钥加密只有私钥能解,私钥加密只有公钥能解。 对于ssh登录来说,我们提前将自己的公钥放在服务器,私钥则自己藏着。我们考虑一个简化的模型。当需要远程登录服务器时,服务器生成一个随机数,用公钥加密发给客户端。客户端用私钥解密后将答案发给服务器,只有能正确解密的客户端才是合法的客户端。这里我们可以看到由于公钥加密的信息只有私钥能解,因此除了掌握着私钥的自己其他通信中间人都不知道具体的通信内容。实际的ssh登录过程比上述要更复杂一些,但核心原理就是以上了。 如果想深入了解非对称加密的知识可以参考密码学的书籍。 实战: 基础的Linux服务器免密码登录 创建公钥与私钥 输入ssh-keygen root@a617896eadbb:/home/service# ssh-keygen Generating public/private rsa key pair. 默认存放位置为用户目录的.ssh文件夹下(~/.ssh) Enter file in which to save the key (/root/.ssh/id_rsa): Created directory ‘/root/.ssh’. 密码不填,此密码是附加在密钥上的密码,不填的话登录时就不会要求输入密码 Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public… Continue reading ssh使用

操作系统

多系统折腾记

最近频繁遇上重装系统,换电脑的事情,试过了多种硬盘分配,分区的系统安装的方案,顾总结一下。 以下内容完全是根据个人经验总结,如果有理解不对的地方望看官指出。 首先从硬盘到操作系统的层级说起  理论知识 硬盘 从尺寸上分说主要分为2.5寸和3.5寸,分别是笔记本和台式主机常用硬盘型号,当然用诸如硬盘盒,阵列柜一类的设备可以无视计算机型号作为usb储存设备连入电脑 。 从储存方式来分常见的有机械硬盘(HDD),固态硬盘(SSD),混合硬盘(SSHD),此外还有液态硬盘,水晶硬盘等各种奇♂怪的处于研发阶段的储存方式。 从接口上分主要有SATA,m-SATA,USB,IDE,还有最近较新的USB3.1 type-c和光纤等接口的硬盘。SATA目前发展到SATA3.0,有6Gbps带宽,是台式机常见硬盘接口形式,m-SATA外观和mini PCI-E一样,和SATA遵循同一套协议,它们的区别类似于 usb type-c之于usb type-a,接口多为固态硬盘采用。 硬盘的容量每年都在增加,2011年时常见的机械硬盘容量大约300G,而现在(2017年)市面上的机械硬盘多为1-2T,而SSD受限于更加贵的制作成本,虽然也有1-2T的,但市面上仍以256G或512G为主 硬盘通常位于储存金字塔的最底层,因此硬盘的读写速度直接影响着整个系统的速度。 机械硬盘为磁盘驱动,其读写速度主要取决于单碟容量,转速,寻道时间等多个因素。但是由于磁盘这种储存介质的固有原因,目前看来机械硬盘的性能已经被压榨得差不多了,各厂家生产出的硬盘读写速度并无太大的差别,更多的只是可靠性一类的提升了。 SSD的工作方式类似于一堆闪存(Flash)颗粒组成raid,避免了机械因素,因此读写速度可以有很大的提升。由于避免了寻道时间,SSD的随机读取速度相比HDD有很大的提升,不过由于有缓存机制,计算机通常不会直接读取硬盘某个bit的数据,因此测试SSD性能时常关注4K随机读写,及一次随机读或写4KB的数据。 引导 计算机的运行本质上是运算器(通常是CPU)依次读取储存器中的二进制的指令,并依据存放在储存器中的二进制数据进行运算的过程。这里的储存器便是Cache,内存(SRAM,DRAM)和外存(硬盘,Flash,CD-ROM)了。 这样便有了一个问题,计算机启动时最早运行的指令该存放于哪里?放内存?内存一般是易失性的(掉电丢数据),不行。外存?外存也有很多种类,该怎么判断和区分呢? BIOS与MBR 实际上,通常计算机最早运行的执行既不在内存,也不在外存,而是在BIOS(Basic Input/Output System)上。BIOS是一块ROM(只读内存),通常由各主板厂家自行设计。一开机BIOS先检查安装的RAM,键盘,鼠标等设备是否正常安装和相应,以及PCI-E等各总线上的设备,并记录中断级别和I/O地址。一切正常后BIOS会按照预先配置的启动顺序,读取第一优先级储存设备的主引导记录,及MBR(Master Boot Record)。 MBR位于储存器最前面的512bit,包含了分区表信息以及操作系统位于哪一个分区(VBR)。至此我们可以加载操作系统并把控制权移交给操作系统了。 另一种情况是MBR中包含的不是操作系统的位置,而是一段启动管理器(boot loader)代码的位置,加载运行boot loader后,再由boot loader来启动操作系统。Linux下的grub便是这种方式。 操作系统启动后询问BIOS并获得配置信息,并检查对应设备的驱动程序是否存在,如果存在将其调入内核。接管对设备操纵权。 UEFI与GPT BIOS存在很多历史的缺陷(汇编编写啦,规范不够统一啦,最多4个主引导分区啦,启动要load一大堆东西啦等等),EFI应运而生。UEFI由EFI1.10发展而来,现在大多主板都支持UEFI,只需要在启动时进行设置即可。 UEFI采用文件系统的方式引导,它可以直接识别FAT格式文件,并直接运行其中以efi为后缀的UEFI应用程序。因此在UEFI中实现双系统很简单,只要将各个系统的引导efi文件放入硬盘中FAT格式的分区下即可。甚至安装系统也只需要将安装文件iso解压到FAT分区即可。 GPT对应于MBR,它有最多可以有128个分区,和唯一的磁盘和分区GUID(Globally Unique Identifier Partition Table Format )等优势 BIOS和UEFI指的是引导方式,一般在主板上进行选择,MBR与GPT是分区表格式,在每个硬盘格式化时进行设定。通常来说BIOS只能启动MBR,而UEFI一般使用GPT。Windows支持BIOS和UEFI启动,但是在安装完成后不能切换启动方式。OS X只支持UEFI启动。 文件系统 每个分区可以有自己独立的文件系统,主流的包括NTFS(Windows常用),ext4(Linux常用),HFS(OS X常用),FAT32(Flash设备常用),exFAT(FAT32的改良版本)等,详细的不再赘述,各操作系统都可以通过安装插件等方式来支持其他的文件系统,不过在非原生支持的文件系统下运行程序可能会出现一些问题(例如ext4的硬链接在Windows下会失效,在Windows下运行HFS格式里的软件可能会出现网络xx一类的蜜汁问题) 操作系统 主流操作系统有Windows,OS X,Linux几大类,其中Liunx和OS X是类Unix系统,因此在使用时有很多相似之处(启动过程除外…) 总结 计算机系统的启动过程是 计算机通电… Continue reading 多系统折腾记