Re: [問題] 如何修改inode?

看板LinuxDev作者 (賽勒斯)時間16年前 (2009/09/05 14:47), 編輯推噓0(0012)
留言12則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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

09/07 10:12, , 1F
這和你使用哪种file system有關。
09/07 10:12, 1F

09/07 10:14, , 2F
可以看看syscall fallcate,他可以預先分配空間給檔案,
09/07 10:14, 2F

09/07 10:16, , 3F
但似乎并不保証block是連續的(這和具体的file system有關)
09/07 10:16, 3F

09/07 10:17, , 4F
通常file system應會盡量少fragment,如果他支援fallocate
09/07 10:17, 4F

09/07 10:18, , 5F
也就是說,并不是所有的file system都有fallocate可以用,
09/07 10:18, 5F

09/07 10:19, , 6F
有些file system的fallocate是假的。
09/07 10:19, 6F

09/07 10:20, , 7F
我推荐你用XFS file system,他有一個ioctl()可以呼叫,
09/07 10:20, 7F

09/07 10:21, , 8F
這個ioctl()可以在open()后呼叫,來預先分配空間給檔案。
09/07 10:21, 8F

09/07 10:24, , 9F
我以前用過,用來分配3GB大小的檔案,如果disk有足夠的空間
09/07 10:24, 9F

09/07 10:25, , 10F
基本可以保証block是連續的。前提就是disk有連續的blocks
09/07 10:25, 10F

09/07 10:27, , 11F
你可以 google 一下 XFS_IOC_RESVSP64
09/07 10:27, 11F

09/07 10:28, , 12F
總之,修改inode里面的值是非常不推荐的。
09/07 10:28, 12F
文章代碼(AID): #1AeWcRCn (LinuxDev)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1AeWcRCn (LinuxDev)