那些程序员固态硬盘,企业重要文件的硬盘是拿什么加密的

Access denied |
used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website () has banned your access based on your browser's signature (3ac0-ua98).用树莓派+移动硬盘+aria2搭建低功耗下载机 - 为程序员服务
用树莓派+移动硬盘+aria2搭建低功耗下载机
移动硬盘挂载及NAS相关请参阅上文《》
1、安装aria2
sudo apt-get install aria2
2、安装aria2 web在线管理端YAAW
YAAW项目地址:
下载资源包,放置http服务器下,http服务器的相关配置,本文不做详细介绍
二、配置aria2
aria2在线手册:
一些有用的aria2参数:
导入从loli.lu导出的aria2文件
同时下载数限制,由于路由和总带宽限制,建议设为3(默认5)
同一个服务器的同时链接数,建议为5-10(默认1)
文件最小分片,文件最多的线程数取决于能分出多少片,当文件小于最小分片大小时,只能开出一个线程,建议为2M(默认20M)
一个文件最多用几个线程下载,建议为8-10(默认5)
–file-allocation
文件预分配,如果USB设备是U盘,SD卡,预分配浪费时间,建议为none(默认prealloc)
创建配置文件:
#创建空白session文件
sudo touch /home/pi/aria2.session
#创建配置文件
sudo nano /home/pi/aria2.conf
在配置文件中放入:(以下内容不解释,请查阅手册)
#下载目录,自行修改
dir=/mnt/myusbdrive/moive/download/
disable-ipv6=true
#打开rpc的目的是为了给web管理端用
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
#rpc-listen-port=6800
continue=true
input-file=/home/pi/aria2.session
save-session=/home/pi/aria2.session
max-concurrent-downloads=3
三、用配置文件启动
sudo aria2c --conf-path=/home/pi/aria2.conf
若以上执行正常,没有报错,可以再加一“-D”的参数,让aria2随机启动。
sudo aria2c --conf-path=/home/pi/aria2.conf -D
专注WEB前端开发
原文地址:, 感谢原作者分享。
您可能感兴趣的代码为SSD编程(6):总结—每个程序员都应该了解的固态硬盘知识 - 文章 - 伯乐在线
& 为SSD编程(6):总结—每个程序员都应该了解的固态硬盘知识
在这部分,我以独立的简单段落的形式总结了其它部分的内容。每个段落概括了其他部分一节或几节的内容,这样可以让读者在每个主题下能够得到更多细节。
1. 存储单元类型
固态硬盘(SSD)是基于闪存的数据存储设备。每个比特都存储在存储单元中,而存储单元分为三类:每个单元1比特(单层单元,SLC),每个单元2比特(多层单元,MLC),每个单元3比特(三层单元,TLC)。
2. 寿命限制
每个单元都有P/E(写/擦)循环的最大限制,在此之后存储单元被认为是损坏的。这表示NAND闪存已经损耗殆尽,并有一个寿命限制。
3. 基准测试很难
测试者是人,因此并不是所有的基准测试都毫无破绽。在读生产商或者第三方的基准测试结果的时候请小心,并在相信这些数据之前使用多个来源的数据。在有可能的时候,使用你的系统特定的工作负载在你打算使用的SSD型号上,运行自己的内部基准测试。最后,着眼于与你的系统最相关的性能指标。
4. NAND闪存页和块
闪存单元组织成为阵列,称为块,而块组织成为面。块中能够进行读写操作的最小单元是页。页不能独立擦除,只能整块擦除。NAND闪存页大的大小并不一致,大多数硬盘的页大小是2KB、4KB、8 KB 或16 KB。大多数SSD每个块有128或256个页。这即表示一个块的大小可能在256 KB 到4 MB之间。例如Samsung SSD 840 EVO的块大小是2048 KB,每块包括256页每页8KB。
5. 读是页对齐的
一次读取少于一页是不可能的。当然可以通过操作系统只请求一个字节,但SSD中会取回整个页,强制读取比所需多的多的数据。
6. 写是页对齐的
写入到SSD的时候,写入将补齐到页大小。所以即便写入操作只影响一字节,都会重写整个页。写入比所需更多的数据被称为写入放大。写入一个页也被称为“(编置to program)”一个页。
7.页不能覆写
NAND闪存页只能在其为“空”的状态下进行写入。当数据改变,页的内容被复制到内部寄存器中,数据更新,然后新版本的数据将存储字啊一个”空“页中,这个操作被称为”读-改-写“。数据并非原地更新,因为”空”页并非原先存储数据的页。一旦数据被保存到硬盘上,原来的页将被标记为“废弃”,并一直保持这样直到被擦除。
8.擦除是块对齐的
页不能被覆写,一旦页成为“废弃的”,让其重新空下来的方法是擦除它们。然而,独立擦除一个页是不可能的,并且只能一次擦除整个块。
主控和内部
9.闪存转换层
闪存转换层(FTL)是SSD主控中的一个组件,它将来自主机的逻辑块地址(LBA)映射为硬盘上的物理块地址(PBA)。很多最新的硬盘使用了类似于“混合日志块”或其派生者的技术,其以类似于日志结构文件系统的方式工作。这允许将随机写入当做顺序写入处理。
10.内部并行
在内部,数个层次的并行使得可以一次向不同NAND闪存芯片上写数个块的数据,这几个块被称为“簇”。
11.损耗均衡
因为NAND闪存单元会损耗殆尽,FTL的一个主要目标是额能的将工作分散到各个单元上,这样块中的闪存单元可以在同一时间损坏。
12.垃圾回收
SSD主控中的垃圾回收确保废弃的块能够擦除并重新变为空状态,使新进入的写入命令可以访问。
(译注:你没看错,少了13,原文就是这样)
14.后台操作可能影响前台操作
例如垃圾回收的后台操作可能对来自主机的前台操作有负面影响,尤其是在持续的小随机写入工作负载下。
15.绝不写入少于一页的数据
避免写入少于NAND闪存页大小的数据以最小化写入放大并避免读-改-写操作。目前一页最大为16KB,因此此值应该作为默认值使用。这个值取决于SSD型号,并且在将来SSD改进之后你可能需要增加。
16.对齐写入
将写入对齐为页大小,写入数据块大小为页大小的倍数。
17.小写入缓存化
为了最大化吞吐量,在任何可能的时候将小写入缓存到内存中,当缓存满了再进行一次大写入,这样来将小写入打包。
18.为了提升读性能,将相关的数据写在一起。
读取性能取决于写入模式。当大数据块一次写入的时候,其将被分配到不同的NAND闪存芯片上。因此你需要将相关的数据写到相同的页、块、或簇上,这样在你之后读取的时候可以利用内部并行,用一个I/O请求更快的读取。
19.分离读写请求
混合的小读写交叉的工作负载会妨碍内部缓存和预读取机制正常工作,并会导致吞吐量下降。最好的办法是避免同时发生的读操作和写操作,并将其以一个接一个的大数据块的形式实现,数据块大小推荐和簇大小相同。举个例子,如果要更新1000个文件,你可以遍历文件逐一读写,但会很慢。如果一次读取1000个文件然后一次写回1000个文件将会好很多。
20.批量废弃数据
当有数据不再需要或者需要删除的时候,最好等到废弃数据量比较大的时候在一个操作中统一废弃它们。这可以使垃圾回收进程可以一次处理更大范围的数据,可以最小化内部碎片。
21.随机写入并不远总是比顺序写入慢
如果写入很小(即小于簇大小)。随机写入将比顺序写入慢。如果写入都是数倍于且对齐簇大小的话,随机写入将会利用所有可用层次的内部并行,并达到和顺序写入相同的水平。对于大部分硬盘来说,簇大小是16或32MB,因此使用32MB应该是安全的。
22.一个大的单线程的读取比很多小的并发读取要好
并发随机读取不能完全使用预读取机制。并且,多个逻辑块地址会指向同一个芯片而不能利用内部并行。一个大的书签操作将会访问连续地址并在预读取缓存可用的时候利用之,并使用内部并行。因此如果用例允许的话,发出一个大的读取请求会好一些。
23.一个大的单线程写入比很多小的并发写入要好
大的单线程写入请求提供的吞吐量和很多并发写入是相同的,然而就延迟来说,一个大的单一写入比并发写入反应时间要短一些。因此,在可用的时候,使用单线程大写入是最好的。
24.当写入小且无法缓存或组织在一起的时候,多线程是有用的。
很多并发写入请求将比单一小写入请求提供的吞吐量要大。因此,如果I/O很小并且不能组织,用多线程比较好。
25.分离冷热数据
热数据是经常改变的数据,而冷数据是不经常改变的数据。如果一些热数据和冷数据被保存在同一个页中,冷数据将会随着热数据的每次读-改-写操作一起复制,并且会因为垃圾回收的损耗均衡不停移动位置。尽可能的将冷热数据分离到不同的也中将减轻垃圾回收的工作。
26.缓存热数据
极其热的速进和其他高频变化的元数据应该尽可能的缓存并尽可能少的写入硬盘。
27. PCI Express 和SAS比SATA快
生产商提供的两个主要的接口是SATA 3.0 (550 MB/s) 和 PCI Express 3.0 (1 GB/s 每通道,使用多个通道)。串行SCSI(SAS)同样在企业级的SSD上可用。在最新版本中,PCI Express和SAS比SATA要快,但也更贵。
28.预留空间对提高性能和损耗均衡十分有用
硬盘可以简单地通过在格式化的时候让逻辑分区容量比最大物理容量小来设置预留空间。预留的空间对用户不可见,但SSD主控仍然可见。预留空间帮助损耗均衡机制应付NAND闪存单元固有的寿命限制。对于写入负载不是很重的工作环境,10%~15%的预留空间足够了。对于持续随机写入的工作负载,保持25%的工作负载将会提升性能。预留空间将会扮演NAND闪存块的缓存的角色,帮助垃圾回收进程吸收写入峰值。
29.启用TRIM命令
确认你的系统内核和文件系统支持TRIM命令。TRIM命令在块被删除的时候通知SSD主控。当垃圾回收进程能够在空闲时候后台擦除这些块,为将来的写入负载准备硬盘。
30.对齐分区
为了确保逻辑写入确实和物理存储设备对齐,你需要将分区和硬盘的NAND闪存页对齐。
这是为“SSD编程”系列文章的总结。我希望我用易于理解的方法表述了我在固态硬盘上的个人研究中学到的东西。
如果你读了这个系列并想深入了解SSD,比较好的起步点是读一些我在第二部分和第五部分列出的引用文献和文章。
另外一个很好的学习资源是FAST大会(the USENIX Conference on File and Storage Technologies,USENIX文件和存储技术大会)。会上每年都有大量出色的研究。我高度推荐他们的网站,视频和文献的集散地。(译注:截至本文翻译完毕, 的网站已经可用了。)
关于作者:
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线B树索引是如何利用在硬盘上的?
来源:csdn
【假如B树存储的是索引的键,以及键所对应的内容的硬盘上存储地址。
那么问题来了。
1.索引往往都是很大的,往往都存在硬盘上。我不可能一次性都读取出来。然后在内存中来进行查找比对,然后再到硬盘对应的位置把数据取出来。这样我还用B树来构建索引干鸟。那数据库索引是怎么工作的呢?
2.基于问题1。假设B树不但存储了索引的键,还有对应内容的地址,他还存储了他的孩子节点的地址。那么我们可以每次只读取一个节点,然后进行比较。如果没找到,则根据条件跳到下一个节点继续查找。这样没问题,但是这个索引文件我们如何构造?一个个节点的地址如何生成?又如何通过程序根据这些地址去获取到数据?最后又如何将一个个节点的内容保存起来生成一个索引文件?
简单的来说,我就是想自己构建一个非常微型的数据库。。关于数据库索引的文章非常多,也有很多结合了硬盘来说。。但都非常不全面,没有说到具体怎么去在硬盘上构建索引,以及利用索引在硬盘上进行查找。。希望大家帮忙解答下我心中的疑问,我非常苦恼这个问题。。
有学习材料更好。。语言最好是C++或C#的。。】
我的想法是先获得索引文件的流。。然后根据我们定义的规则(比如说64个字节为一个节点)先读取0-64,然后进行比较。如果当前节点没有,则跳到下一个节点进行查找。当然,我们有存储下一个节点的位置。。比如说是在128。。我们就读128-192。。然后继续下去。。但感觉数据库不是这么干的。。
感觉你可以参考这个
这个看过了。。这个是建立在内存的基础上的。。
这样想法并不对,可能你没有理解B-Tree的原理。
简单的说,B-Tree不需要一个节点一个节点第顺序寻找。它只要枝干跳分支,分支跳分支等等。而每个节点占用的内存可以很小。比如5阶b-tree每个节点最多放5分支索引。
以下是科普文章(希望链接能打开):
https://zh.wikipedia.org/wiki/B%E6%A0%91
zhouzangood:
路过帮顶!
B树为什么不需要一个节点一个节点顺序找?
在我看来他跟平衡二叉树和红黑树不同的一点就是高度问题。。它是平衡多叉树。。
如果每次跳跃的动作相当于硬盘的一次寻址操作,降低树的高度就比较重要了。。m阶b-tree每个节点最多有m个孩子。。m&=2。。这个没问题。。
我纠结的是在硬盘上是怎么玩的
1. 索引即可能全都读取到内存,也可能不全部读取到内存,不同数据库系统的实现有所不同。
索引并不大,所以把单个索引一次性地读入内存也是可以的。例如一个数据表可能有100M 空间,其索引可能只占用200K。除非你是把一条记录里边几乎所有字段都组合起来作为索引键,否则怎么可能索引跟数据的大小类似呢?
假设数据库有100个表、200个索引,不必一次把所有索引都读入内存,用到哪一个再读哪一个。类似地,你也可以在读取索引时仅仅读取其顶层对象在内存中创建映射,而将下一级的节点使用一个自定义的 Lazy 机制对象(也就是说比普通对象来说,多一个判断是否“有值”的功能和一个“加载”功能),需要扩展哪一个节点时才读取某个节点的下一层节点。
从性能上说,读取整个(单个的)索引到内存里是性能和功能很好的平衡。动态加载节点则有可能过于谨慎。
2. 这个问题,在任何一本关于数据库原理的教科书上都有。注意我说的是“数据库原理”,而许多人学过的可能只是简单应用(也就是职业教育的入门教程,而非针对从事研发工作的人的教程)。
你找一个数据库原理方面的书,它会告诉你通用的关系数据库系统如何设计自己的虚拟数据块(书上可能翻译为“虚拟磁盘块”),数据块列表(使用中的、空闲的),例如每块1M大小。
一个文件内部,可以包括多个虚拟数据块。每一块都有一个指针链接到下一块。同时文件头部可以有几十字节固定区域,用来定义诸如“链表1、链表2、链表3、链表4的起始偏移”,以及“最大链表长度、多少分钟压缩合并一次空闲”等等全局设置。
每一数据块中保存多条记录,因此每一个记录的“地址”其实就是“文件内磁盘块地址+磁盘块内数据数组下标”。
当数据被创建时,可以插入“某个正在使用的”磁盘块的空闲空间中(同时因为块内空闲空间的),如果没有则从空闲磁盘块列表上取下一个磁盘块使用,如果还没有则动态扩大文件(例如1M空间)来分配一个磁盘块使用。
当数据删除时,它可以挪动磁盘块内的空间(使得空闲部分集中到尾部)。如果数据原来是磁盘块中唯一一个,则磁盘块变为空闲。如果数据不是原来磁盘块中唯一一条数据,则磁盘块在“使用中的磁盘块”的链表的位置可能因为空闲增大而向前移动。
所以,一个普通的可随机读写的文件,囊括了数据库系统所有数据。而并不需要分成许多文件。
数据的“所在数据块编号”不一定是绝对对应于文件中的偏移地址,完全可以在数据库系统初始化时一次性扫描所有数据块,在内存中创建字典数据结构。如果说单个索引可以不一次性读入内存,但是这个数据块编号跟数据块的文件偏移地址的对应关系,则一定要一次性读入内存的。
事实上,如果你是开发一个“微型”的数据库,那么你完全可以在运行时、系统初始化时才临时创建索引,在系统关闭之前将索引序列化到磁盘(例如文件头部的“链表4”来记录顺序记录序列化了得索引数组的起始地址)。假设关闭之前若没有正确保存索引,则下次初始化启动时则重建索引,否则就读取上次保存的值在内存中反序列化。对索引可以稍微简单粗暴地处理。
文件在硬盘中是以族为单位存储的,所以你在组织树节点数据时最好不要超过族的规模
这样读取时就是最快的
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动

我要回帖

更多关于 程序员改需求拿刀动图 的文章

 

随机推荐