- 博客(41)
- 问答 (5)
- 收藏
- 关注
原创 BTRFS - Performance
备注:本文翻译自:IBM Research Report - BTRFS没有商定的测试文件系统性能的标准。虽然有NFS和CIFS的行业基准,他们仅仅覆盖现场看到的一小部分的工作量。在一天结束时,对用户来说最重要的是他特殊应用的性能。检查哪个文件系统时最好的匹配一个特殊的使用例子的唯一现实的方法时去尝试几种文件系统,看看哪一种工作的最好。因为我们不能覆盖所有的用例,我们选择了一种常见的基准,...
2019-09-12 10:08:25
785
原创 BTRFS Defragmentation
备注:本文翻译自 IBM ResearchReport BTRFS - Linux Btree Filesystem在写的时候,碎片整理以两种不同方式解决。为了碎片整理一个文件,它被读取,COWed,并在下一个检查点写入磁盘。这可能会使他更加顺序,因为分配器尝试在尽可能少的extents里写出来。缺点是与旧快照的共享丢失了。在许多情况下,这个简单的算法是有效的。在一些情况下,一个更加复杂的算...
2019-09-06 16:38:46
656
原创 BTRFS- Multiple Device Support(多重设备支持)
备注:本文翻译自 IBM Research Report BTRFS - Linux Btree FilesystemLinux 有设备映射(DMs)子系统去管理存储设备。举个例子,LVM和mdadm,这些时软件模型,主要功能是管理raw disks,合并他们到虚拟的连续的块地址空间,并且将其抽象话到更高级别的内核层。他们支持镜像,剥离和RAID5/6。无论如何,checksums是不支持的,...
2019-09-02 10:04:48
530
原创 BTRFS - A Forest,extent分配树,同步与并发
一、A Forest文件系统由树木森林构造(a forest of trees),超级块定位在一个固定的磁盘位置。它指向一个树的根树节点,该节点索引构成文件系统的b树。The trees are:Sub-volumns:存储用户可见文件和目录。每个子卷有一个单独的tree实现。子卷可以被快照和克隆,创建额外的b-trees。The roots of all sub-volumes are ...
2019-08-29 11:15:26
780
原创 Linux kernel 如何在挂载的时候确定具体文件系统类型
本文通过分析内核挂载和初始化源码剖析内核是如何知道调用的是具体哪个文件系统的函数。一:文件系统注册结构体函数(参考:https://books.google.co.jp/books?id=h0lltXyJ8aIC&pg=PT498&lpg=PT498&dq=struct+file_system_type&source=bl&ots=gP5rKV8f...
2019-08-28 16:41:39
1087
原创 Filesystem Btree-BTRFS extent
Btrfs b-tree是一种通用的数据结构,包括三种数据结构:keys,items,block headers. block header 是固定大小且持有一些域checksum,flags,filesystem ids,generation number等。 Key用结构描述对象的地址。item is a key with additional offset and size fil...
2019-08-20 10:32:19
434
原创 BTRFS - COW B-trees
文章来自于 IBM Research Report (BTRFS - B-Tree filesystemb-tree不变量是一个节点在被拆分或合并之前可以维护2到5个元素。假设树节点只占用一页。 未修改的page被标记成yellow, COWed页被标记成绿色。 图1(a)显示了两级的初始树。图1(b)显示了在最右边叶子插入一个新的key 19。路径沿树向下遍历,并且所有修改的页面都...
2019-08-16 10:25:03
846
原创 EXT4 ATTRS - lazy_itable_init分析(mke2fs 和mount)
在创建Ext4文件系统时,必须清理inode表的现有区域(用null覆盖,或“0”)。这真的需要时间。但是,启用“lazyinit”特性后,ext4文件系统的创建将显著加快,因为它不会立即初始化所有inode表,而是在后台的初始挂载过程中逐步初始化它们(内核版本2.6.37)此外,如果启用了uninit_bg特性,那么mke2fs不会完全初始化inode表。这显著加快了文件系统的初始化速度,但...
2019-08-14 15:38:10
2401
原创 BTRFS - what makes BTRFS different?
1.EXT3之前的文件系统使用块指针,比如说每个文件的inode 对应每个单独的块包含一系列的指针去保存文件的数据,这样就导致,比如对于1GB 的文件来说需要256K的单独块指针,多浪费空间啊后来EXT4 改成了使用extent 结构去描述数据块,每个extent是一组连续的块。由于文件系统可以存储连续的数据,基于extend的存储大大减少了管理文件空间的开销2.BTRFS 也使用exte...
2019-08-06 16:52:48
319
原创 EXT4文件系统笔记之ext4_fill_super
-----------------------------------写在2017/05/29 13:56--------------------------------------------------------周六答辩,最近无所事事,重新看以前自己写的笔记,心中颇有感慨,写上来吧,如果哪天笔记本丢了,所有的回忆也都没有了。其实我真的不是一个会写东西的人,学习过程中也很少写,因此遇到同样
2017-05-29 14:55:54
2678
原创 大话存储笔记(一)
------2017/05/22 20:30最近在写论文,很扯淡的论文,因此没有啥写的意义,纯属为了给老师交差。无聊就看看书,不为别的,就只是看看,记录一下吧1、SSD(固态硬盘),比较常见的是基于FLASH介质的,一个PAGE是FLASH芯片IO的最小单位,每128个page组成一个block,每2048个block组成一个区域。一整片flash芯片由两个区域组成,一个区域存
2017-05-22 20:40:21
829
原创 修改重新编译sqlite源代码测试流程
我的天 赶紧写下来,前段日子折腾出来 然后没有记录今天再弄就疯了。型号可以查看历史的命令 。。呜呜1、修改好源代码保存之后 比如源码路径是 /home/phf/sqlite-autoconf-3180000 在该目录下运行 ../sqlite-autoconf-3180000/configure --prefix=/home/phf/sqlite 将生成
2017-05-21 15:14:01
1130
原创 python爬虫源代码
(一)百度贴吧帖子用户与评论信息 https://github.com/Hafy/BaiduTieba(二)豆瓣登录脚本 https://github.com/Hafy/DoubanLogin
2017-05-18 10:45:21
1665
原创 EXT文件系统扩容
ext系列的文件系统都在块组描述符后面进行预留块组描述符块以便于后续的扩充,目前来看 是系统本身的块组描述符块与预留的块组描述符块数为1024块(目前来看是这样没有看源代码进行验证) 我一直想着所谓的可扩展性是什么。今天进行测试做了一下验证。1、我的硬盘是320G 大小的 两个分区 sdb1 大小为34G sdb2 260多G 我将其格式化为ext4文件系统 然
2017-05-10 14:16:21
2031
原创 Django+nginx+gunicorn部署流程(二)
关于部署 还参考了这篇文章 https://my.oschina.net/lifeisshort/blog/511600终于来到nginx配置了 这里我弄了好久 。。。。(一)、nginx的配置方法有很多 我才用的是这种 在/etc/nginx/site-available/目录下新建一个conf配置文件 随意取名字(比如hafy.conf)
2017-05-08 18:34:44
712
原创 Django+nginx+gunicorn部署流程(一)
整体参考该链接 http://zmrenwu.com/post/20/,但其实还是遇到了很多坑 主要这是第一次自己部署 遇到了很多问题 !虽说部署成功但是其实还不明白nginx django gunicorn之间 的关系 但是先记录下来把 万一那天再次部署又要重新来过! (一) 1、首先肯定需要购买服务器,,自行百度阿里云服务器购买 ,我买的学生套餐。
2017-05-08 18:00:41
2078
原创 博客之新增上传文件(包括图片)功能
先哭两声 。。。我的天 博客是去年11月到1月写的初步模型,当时边看官网边学边写。现在 时隔四个月想新增一点功能。才发现 该死 全都忘光啦。。新增个文件 都弄了五个小时 。呜呜1、首先 需要在setting.py中加入以下两句 表明 以后 文件不特地指明的话都存储在根目录下的media目录下 MEDIA_URL='/media/' MEDIA_ROOT= os
2017-05-08 16:09:15
625
原创 Django +nginx+gunicorn+阿里云部署笔记之git 与数据库迁移 +本地与服务器文件传输
部署过程需要用到git 1、 git clone url(github源代码网址) 既可以将代码拉到本地2、 代码修改后 需要 git add . (或者可以指明自己需要将已修改的具体的某几个文件的更新提交到缓存中,我一般用git add .)3、 接着是 git commit -m “标记一下这次提交的文字” 比如git commit -m "test1"
2017-05-05 11:35:52
831
原创 TCP三次握手四次挥手过程分析
情景分析:小编自己写了个服务端和客户端都是本机的TCP程序,server.c,client.c.客户端给服务器发送hello world,服务器接收到客户端传来的数据将其转换为大写,回送给客户端,客户端接收到转换后的字符串之后,主动关闭连接。都是8000这个端口 1、使用tcpdump 抓包。 tcpdump -iany port 8000 2、执行服务器端程序./s
2016-12-16 17:05:27
987
2
原创 ln软硬链接
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。ln -s 源文件 简历的链接文件 //创建软链接补充:ls 列出目录下的文件及其目录列表 ls -i 列出目录下的文件及其
2016-11-23 16:21:13
587
原创 python学习之函数
一、函数 注:当一个函数名字由两个单词组成的时候 ,第二个单词的首字母大写(统一) 当我们定义一个函数的时候 用def语句 def 函数名(参数列表,可以没有参数): 比如i=1j=2def add(a,b): return a+bprint add(i,j)二、关于函数形缺省参数 注:假如函数是有形参的 ,则可以在声
2016-11-23 16:19:57
611
原创 python学习之内置函数
一、 (1) abs() 取绝对值 (2)max() 最大值 max(iterable[, key=func]) -> value max(a, b, c, ...[, key=func]) -> value With a single iterable argument, return its largest item. With tw
2016-11-23 16:19:33
554
原创 python学习之函数replace capitalize split zip map
一、字符串函数 1、replace() 函数原型S.replace(old, new[, count]) -> string 比如 str="hello world hello phf" str.replace("hello","hi") 则会将str里与world匹配的字符串用新的字符串 “hi”代替 输出"hi world hi phf"如果匹配不了原样
2016-11-23 16:18:17
992
原创 python 学习之流程控制if for while 及print 格式控制
在交互式界面上 退出python 可以输入exit() 或者按住CTRL+D 为了支持中文输出 在py文件第二行加补充 print "%s" % 'name' (如果是print "%s" 'name' 则会输出 %s name 但是如果在后面加个% 则意思是将后面的name的值按格式%s输出,即输出name)如果是两个及其以上的输出 即print "%s %s" % (则这里需
2016-11-20 17:24:25
957
原创 python 学习第一天-基础知识
(一)python文件类型 (1)源代码 以 .py 为扩展名 不需要编译 (2)字节代码 源文件经编译后生成的.pyc文件 编译方法:import py_compile py_compile.compile("hello.py")(3)经过优化的源文件 python -O -m py_compile h
2016-11-20 13:03:50
684
原创 数据结构之 栈 实现进制转换
#include#include #include #define N 4#define SIZEINCREMENT 2typedef struct{int *arr;int top;int size;}Stack;void init_stack(Stack *mystack){mystack->top=0;mystack->size=N;
2016-11-16 12:54:53
1165
原创 linux shell 编程笔记 getopts sed 正则表达式 shift
1、算式计算 (1)expr 对象必须是数字 a=1b=2c=`expr $a + $b` 乘法需要转义 即 c=`expr $a \* $b`(2)$(()) 乘法不需要转义 c=$((a+b))2、getopts函数接受参数 while getopts vly: ARGS //y:表示y后面需要接参数do cas
2016-11-14 12:59:19
772
原创 linux shell 编程 笔记(cat who wc grep ping seq)
1、wc 命令 wc [OPTION]... [FILE]... wc命令用来打印文件的文本行数、单词数、字节数等(print the number of newlines, words, and bytes in files)-c, --bytes 字节数 print the byte counts -m, --cha
2016-11-13 18:38:48
928
原创 linux shell 学习(下)
- eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])-ne —比较两个参数是否不相等-lt —参数1是否小于参数2-le —参数1是否小于等于参数2-gt —参数1是否大于参数2-ge —参数1是否大于等于参数2-f — 检查某文件是否存在(例如,if [ -f "filename" ])-d — 检查目录是否存在几乎所有的判断都可以用这些比较运算
2016-11-10 17:42:02
606
原创 linux shell学习(中)
一、数组 (1)bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为: array_name=(value1 ... valuen)比如 arr=(1 2 3
2016-11-10 16:46:52
424
原创 GCC 相关
1、gcc 指定编译链接头文件路径 gcc main.c -I/mylib/一、库文件的搜索路径1、在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存退出,然后在命令行ldconfig2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(
2016-11-10 13:26:30
509
原创 linux学习之shell(上)
1、echo的用法 输出一行文本到终端 echo my name is phf 输出变量的值 声明变量x并给它赋值为10。$ x=10会输出它的值:$ echo The value of variable x= $x The value of variable x=10 输出环境变量的值 echo $PATH
2016-11-10 11:30:11
501
原创 C语言基础
一、C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。 char str[ ]="abcd";sizeof(str)=5strlen(str)=4char str[20]="0123456789";int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,
2016-11-06 15:11:20
714
原创 快速排序
#includevoid quick_sort(int arr[],int n);void print_arr(int arr[],int n);void main(){int i=0,num=0;int arr[100]={0};printf("请输入数组长度:\n");scanf("%d",&num);printf("请输入数组元素\n");while(i
2016-11-06 13:12:43
490
原创 linux kernel development 学习第一天之inline 和likely
1、解压 bz2 tar jxvf 解压 gz tar zxvf2、关于内联函数inline 关键字 http://blog.chinaunix.net/uid-9620812-id-1643070.html 在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。由于在编译时将内联函数体中的代码替代到程序中,因此会增加目标程序代码量,进
2016-11-04 19:52:23
586
原创 linux 学习之应用程序和网络编程笔记(中)
一、dup 和dup2int dup(int oldfd); dup系统调用对文件描述符进行复制,会返回一个新的文件描述符,譬如原来的fd是3 ,则返回的是4 (dup返回的文件描述符是该进程未使用的最小的文件描述符)该两个文件描述符都指向oldfd打开的文件,实际上构成了文件共享,对其进行读写,其实是接续写。使用dup的缺陷:使用dup时不能指定返回的文件描述符数字,
2016-11-01 12:50:37
550
原创 linux C学习第二天之应用编程和网络编程笔记(上)
1、C语言中不能再一个函数里面定义别的函数 。所以没有局部函数2、const int a=5; int const a=5; 两者意义一样 该变量a的值是个常量,不能改变 const int *p; int const *p ; const 在*前面表示指向的数据是个常量,指针可以改变int * const p;const int *const p
2016-10-31 12:31:48
812
原创 嵌入式LINUX C学习之笔记(第一天)
1、整形和浮点型的存储方式不同,怎么存储就怎么取出来 ,char int short long存储方式一样 只是表示地范围大小不同 ,float和double是一样的只是方式有点不同,表示的精度不同。不要用%f取出整形,也不要%d取出浮点型char int short long分有符号和无符号 而浮点型 只有有符号没有无符号2、void类型的函数和形参 在函数的返回类
2016-10-30 14:05:53
579
原创 linux 学习之 进程
一、父进程fork出子进程,然而并不知道子进程什么时候才能结束,调用wait()函数得到子进程的结束信息,#includepid_t wait(int *statloc); 调用wait()的进程会阻塞,知道该进程的任意一个子进程结束。wait()会取得结束的子进程的信息,并且返回该子进程的进程IDpid_t waitpid(pid_t pid,int *statlo
2016-10-28 20:35:53
314
空空如也
sqlite数据库表名长度有限制吗?
2017-05-19
mysql数据库存储文件的整个路径名存得下么
2017-03-28
Linux内核可以访问数据库么?
2017-03-28
linux e2fsprogs 采用红黑树管理文件系统的bitmaps
2016-12-06
hadoop是如何快速定位文件位置的?
2015-09-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人