看板 LinuxDev 關於我們 聯絡資訊
※ 引述《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
wheelz:這和你使用哪种file system有關。 09/07 10:12
wheelz:可以看看syscall fallcate,他可以預先分配空間給檔案, 09/07 10:14
wheelz:但似乎并不保証block是連續的(這和具体的file system有關) 09/07 10:16
wheelz:通常file system應會盡量少fragment,如果他支援fallocate 09/07 10:17
wheelz:也就是說,并不是所有的file system都有fallocate可以用, 09/07 10:18
wheelz:有些file system的fallocate是假的。 09/07 10:19
wheelz:我推荐你用XFS file system,他有一個ioctl()可以呼叫, 09/07 10:20
wheelz:這個ioctl()可以在open()后呼叫,來預先分配空間給檔案。 09/07 10:21
wheelz:我以前用過,用來分配3GB大小的檔案,如果disk有足夠的空間 09/07 10:24
wheelz:基本可以保証block是連續的。前提就是disk有連續的blocks 09/07 10:25
wheelz:你可以 google 一下 XFS_IOC_RESVSP64 09/07 10:27
wheelz:總之,修改inode里面的值是非常不推荐的。 09/07 10:28