FUSE을 사용하여 원하는 모든 inode 번호를 시뮬레이트 할 수 있습니다.
FUSE와 함께 제공되는 hello_ll.c
예제를 살펴보십시오. 그것은 inode 번호가 2 인 단일 파일을 가진 파일 시스템을 생성합니다. 원하는 파일 번호로 파일을 생성하기 위해 파일을 쉽게 수정할 수 있습니다. 0x10000000FFFFFFL
와
빠른 검사는이 작업을 수행 :
는 FUSE 이외의
$ stat fuse/hello
File: `fuse/hello'
Size: 13 Blocks: 0 IO Block: 4096 regular file
Device: 11h/17d Inode: 4503599644147711 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
, 내가 "진짜"파일 시스템에 inode 번호를 강제로 어떤 실제적인 방법을 알고.
--- hello_ll.c.orig 2011-11-14 13:22:19.000000000 +0100
+++ hello_ll.c 2011-11-14 13:20:27.000000000 +0100
@@ -9,6 +9,7 @@
*/
#define FUSE_USE_VERSION 26
+#define MYINO 0x10000000FFFFFFL
#include <fuse_lowlevel.h>
#include <stdio.h>
@@ -31,7 +32,7 @@
stbuf->st_nlink = 2;
break;
- case 2:
+ case MYINO:
stbuf->st_mode = S_IFREG | 0444;
stbuf->st_nlink = 1;
stbuf->st_size = strlen(hello_str);
@@ -65,7 +66,7 @@
fuse_reply_err(req, ENOENT);
else {
memset(&e, 0, sizeof(e));
- e.ino = 2;
+ e.ino = MYINO;
e.attr_timeout = 1.0;
e.entry_timeout = 1.0;
hello_stat(e.ino, &e.attr);
@@ -117,7 +118,7 @@
memset(&b, 0, sizeof(b));
dirbuf_add(req, &b, ".", 1);
dirbuf_add(req, &b, "..", 1);
- dirbuf_add(req, &b, hello_name, 2);
+ dirbuf_add(req, &b, hello_name, MYINO);
reply_buf_limited(req, b.p, b.size, off, size);
free(b.p);
}
@@ -126,7 +127,7 @@
static void hello_ll_open(fuse_req_t req, fuse_ino_t ino,
struct fuse_file_info *fi)
{
- if (ino != 2)
+ if (ino != MYINO)
fuse_reply_err(req, EISDIR);
else if ((fi->flags & 3) != O_RDONLY)
fuse_reply_err(req, EACCES);
@@ -139,7 +140,7 @@
{
(void) fi;
- assert(ino == 2);
+ assert(ino == MYINO);
reply_buf_limited(req, hello_str, strlen(hello_str), off, size);
}
원하는대로 [fuse] (http://fuse.sourceforge.net/)로 파일 시스템을 만들 수 있습니다. 비록 가능하다면 확실하지 않습니다. – Mat
@Mat : 정답이라고 생각합니다. 게시하고 싶을 수도 있습니다. 64 비트 inode를 반환하는 자신 만의 파일 시스템을 작성하십시오. –
@ JörgWMittag : 게시하기 전에 실제로 가능했는지 확인하고 싶었습니다. FUSE가 내부적으로 inode 번호를 처리했는지 여부는 알지 못했습니다. 작동하는 것 같아서 대답을 게시했습니다. – Mat