作者wheelz (wheelz)
看板LinuxDev
标题Re: [问题] 如何修改inode?
时间Mon Sep 7 10:44:17 2009
※ 引述《silence226 (赛勒斯)》之铭言:
: ※ 引述《silence226 (赛勒斯)》之铭言:
: : 标题: [问题] 如何修改inode?
: : 时间: Wed Sep 2 20:53:41 2009
: : hi all,
: : 若想修改 inode 里面的 block pointer 位置
: : 用 C or C++,要如何能够控制/修改 file system 的 inode呢?
: : 不知道有没有system call可以呼叫?
: : 谢谢 :)
: : --
: : ◆ From: 60.251.70.82
: : → wheelz:没有syscall可以呼叫,也不推荐修改inode里面的值,因为 09/04 18:35
: : → wheelz:不同的file system,在hard disk上的inode是不一样的 09/04 18:35
: : → wheelz:当然,如果你硬要改,可以用/dev/sda这样的方式来做,只要 09/04 18:37
: : → wheelz:该/dev/sda没有mount 09/04 18:37
: 可否请问 wheelz 兄,在没有 mount 的情况下该如何做呢?
: 会有这样的想法是因为, 想要建立一个没有 fragment 的大型档案
: 若能够控制 inode 内的 block pointer, 就能够将档案建立於连续的 block 内
: 还是有其他的做法能达到相同的目的?
: 谢谢
推文好累。呵呵。
之所以推荐XFS,不单单因为他有一个ioctl()可以预先分配空间给档案,
也是因为他对大型档案的支援很好。
另外,现在比较新的file system,比如ext4,也有预先分配空间的功能,
这个功能通常就是由fallocate()或者posix_fallocate()来支援的。
但要考虑到ext4还是一个比较新的file system,可能bug还蛮多的,
另外,考虑到有些以前的file system虽然也有fallocate()或者posix_fallocate(),
但他们是通过给档案填充0的方法来达到预先分配空间的目的,这容易引起混淆。
所以我还是推荐 XFS file system以及他的ioctl(),这个比较确定。
当然,XFS的ioctl()也不是100%保证可以做到没有fragment,他也是尽量去做。
如果disk上根本没有连续的block,他也是做不到的,但他会做到尽可能少的fragments
另外,XFS也有 online defragmentation的功能。
可以在 disk online 的情形下 defrag,效果也不错。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.200.16.116
1F:→ wheelz:更正一下,填充0的fallocate一般是glibc做的 09/07 10:55