作者silence226 (赛勒斯)
看板LinuxDev
标题Re: [问题] 如何修改inode?
时间Sat Sep 5 14:47:54 2009
※ 引述《silence226 (赛勒斯)》之铭言:
: 标题: [问题] 如何修改inode?
: 时间: Wed Sep 2 20:53:41 2009
:
:
: hi all,
:
: 若想修改 inode 里面的 block pointer 位置
:
: 用 C or C++,要如何能够控制/修改 file system 的 inode呢?
:
: 不知道有没有system call可以呼叫?
:
: 谢谢 :)
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ 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 内
还是有其他的做法能达到相同的目的?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.70.187.83
1F:→ wheelz:这和你使用哪种file system有关。 09/07 10:12
2F:→ wheelz:可以看看syscall fallcate,他可以预先分配空间给档案, 09/07 10:14
3F:→ wheelz:但似乎并不保证block是连续的(这和具体的file system有关) 09/07 10:16
4F:→ wheelz:通常file system应会尽量少fragment,如果他支援fallocate 09/07 10:17
5F:→ wheelz:也就是说,并不是所有的file system都有fallocate可以用, 09/07 10:18
6F:→ wheelz:有些file system的fallocate是假的。 09/07 10:19
7F:→ wheelz:我推荐你用XFS file system,他有一个ioctl()可以呼叫, 09/07 10:20
8F:→ wheelz:这个ioctl()可以在open()后呼叫,来预先分配空间给档案。 09/07 10:21
9F:→ wheelz:我以前用过,用来分配3GB大小的档案,如果disk有足够的空间 09/07 10:24
10F:→ wheelz:基本可以保证block是连续的。前提就是disk有连续的blocks 09/07 10:25
11F:→ wheelz:你可以 google 一下 XFS_IOC_RESVSP64 09/07 10:27
12F:→ wheelz:总之,修改inode里面的值是非常不推荐的。 09/07 10:28