作者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