help-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Mount different filesystems with the related codes in GRUB


From: Arch Stack
Subject: Mount different filesystems with the related codes in GRUB
Date: Sat, 19 Sep 2015 21:50:30 +0800

I want to  create a filesystem driver to read different type of filesystems(Ext2/3/4, Reiserfs, XFS, Btrfs...) on Windows with the help of the related codes in GRUB. I asked it on help-grub with the subject "How to reuse the the part of codes about file system in grub ?"

Now I have finished with the help of dokany (similar to FUSE but works on Windows).You can find the what I have done on https://github.com/Archstacker/GRUB. The most important file is grub-mount-win.c , which implements the interface to dokany.


These are what I have done above the codes above GRUB:

1.Add check for file_name in grub_file_open. It has been fixed in [PATCH] file: ignore host disk in blocklist check

2.Add size and symlink attribute to grub_dirhook_info. Otherwise I must open each file when readdir, and its very slow.You can test it with grub-mount, when you ls in a directory which has thousands of files(such as /bin), it will cost a lot of time.

3.Use ‘fs->open’ rather than ‘grub_file_open’.Because the grub_file_open must probe for the type of filesystem each time, which will cost a lot of time and is unnecessary. And it will try to decompress each file it opened, but I think its not suitable.I think its better to check for whether the filesystem has enabled compress or not.

4.Add check when store disk cache.You can find it on grub-devel. Because dokany will start multi thread at the same time, the function grub_disk_cache_store must check for cache->lock before copy something to it. Otherwise ,the program may crash because cache->data is set to zero by other thread before grub_memcpy in grub_disk_cache_store.

 

But because GRUB is single thread and it use a global variable grub_errno.When it was called with dokany in multi thread, the grub_errno will be wrong in some times, which will cause the crash of the program or the other things unexpected.

I dont know how to solve it suitable, so I have set the ThreadCount of dokany to 1 now. But it will be too slow when open a directory with a lot of files in it.

You can try what I have done in https://github.com/Archstacker/GRUB/releases/latest

Do you have good ideas to solve it? And what do you think of this project?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]