搞懂外置存储,让你的数据更安全_数据组织

这几天语雀崩溃的事闹得沸沸扬扬,单看技术这一点的话,就是存储出了问题,没有做好热备。

趁着这个契机,我又翻了一遍外置存储,回顾回顾其中的基本概念和原理,做了个笔记,也分享给大家。

什么是外置存储?

我们常见的硬盘、 光盘、U盘都可以称之为外置存储,还有现在不常见的磁带、软盘,也都属于外置存储。

搞懂外置存储,让你的数据更安全_数据_02

外置存储是相对于计算机内存而言的,内存在内,是计算机的核心组件,外存在外,是计算机的输入输出设备。

外置存储的主要特点:能够持久化存储数据,是非易失的,也就是说,即使电源断开,数据也不会丢失。

想象一下,你写了一篇很重要的报告,如果没有外置存储,电源一旦断开,你的辛勤工作就会付诸东流。但有了外置存储,即使电源断开,数据也不会丢失。外置存储设备设计的非常人性化,方便了我们的读写和查阅。

存储的种类

外置存储设备种类繁多,技术也在持续发展。

搞懂外置存储,让你的数据更安全_计算机组成原理_03

计算机的早期,数据主要通过磁带存储。磁带主要是顺序读写,这种设计主要用于数据归档。比如银行每天的交易记录备份等。

然后是我们熟悉的光盘,它能顺序写入数据,随机读取,适合于数据分发和归档。比如分发电影、音乐等。

再来是我们日常使用最频繁的软盘、磁盘、U盘以及SSD,这些都是随机读写的设备,是目前计算机日常使用的主要存储工具。

数据组织方式

搞懂外置存储,让你的数据更安全_计算机组成原理_04

不同的存储设备有不同的数据组织方式,外置存储数据组织方式主要有两种:

只读型,如光盘,我们需要一种能够快速读取数据的方式,于是有了ISO-9660、UDF、Joliet等数据组织方式,这些方式都是将元数据和文件数据紧凑存储,优化了读操作。

读写型,如磁盘,我们需要一种能够快速查找数据的方式,于是有了NTFS、HFS、EXT3、EXT4、BTRFS、JFS2等文件系统,这些文件系统中的元数据通常采用B树/B+树/H树等数据结构来组织。

在外置存储设备的数据组织中,我们还要讲讲日志。它解决了什么问题?想象一下,如果在写入数据的过程中电源突然断开,那么数据就会丢失。为了防止这种情况,存储设备内部引入了日志功能。日志的工作原理是先写日志,再写文件系统,如果后边写入被中断,恢复时从日志回放写入。

这样,每一个写操作涉及的元数据(如文件的位置、大小、创建时间等)和用户数据都要在硬盘上写两次,一次写在日志里,一次写在文件系统上。如果文件很大,效率就会很低。为了提高效率,我们有一种更高效的方式:先写入用户数据(user data)、再写日志(只有元数据),只要日志是有效的(日志有一个写完毕结束符,没有结束符的就是无效日志),那么它对应的用户数据也是有效的。一旦发生掉电故障,最坏的结果也就是最后一条日志没记完,对应的用户数据会丢,但是文件系统的一致性和完整性是有保证的。比如Linux EXT3文件系统就可以选择Data Journaling还是Ordered Journaling,分别对应上述两种方式。

使用步骤

搞懂外置存储,让你的数据更安全_数据组织_05

那么,如何使用外置存储设备呢?在使用外置存储设备时,我们需要经过三个步骤。

首先是分区,将一个物理存储设备逻辑划分为多个存储设备,方便管理。

然后是格式化,初始化并标记分区的文件系统格式。

最后是挂载,将存储设备加入到操作系统的文件系统命名空间中。

编程接口

最后,我们来看看如何通过编程来操作外置存储设备。

首先,操作系统提供了一系列底层支持,比如虚拟内存在磁盘上使用SWAP分区交换内存分页数据;所有输入输出设备都通过文件来抽象访问,在Unix中一切皆文件(当然有些理想化);还有通过文件操作控制冲突,用于进程同步和互斥;以及一些操作系统底层的系统调用等。

第二,操作系统基础库提供了一些命令,比如ls, mkdir, mv, cp, rmdir,cat, vi, mv, cp, rm等,大家使用linux时应该会经常用到其中的某些命令。这里特别提示大家,谨慎使用 rm。

最后是编程语言封装的一些接口,比如os.Mkdir, os.Rename, os.Remove,os.Open/Create/OpenFile等,程序中读写文件时经常会用到类似的函数或方法。


总的来说,外置存储设备是我们日常计算机使用中不可或缺的一部分,它的使用原理和方式都是我们作为软件技术开发人员必须要掌握的基础知识。希望这篇文章能帮助你更好地理解和使用外置存储设备。

学好技术一是要多实践多总结,实践出真知,二是要多沟通多交流,提高学习效率,特别是关注我这个微/信/公/众\号:萤火架构,我会分享很多的架构经验和认识,可以帮你少走一些弯路。