Opened 11 years ago

Closed 10 years ago

#2707 closed bug (fixed)

cannot mount ext3 file system

Reported by: Adek336 Owned by: axeld
Priority: normal Milestone: R1
Component: File Systems/ext2 Version: R1/pre-alpha1
Keywords: Cc:
Blocked By: Blocking:
Has a Patch: no Platform: All

Description

On on a SATA drive, fourth logical partition. The file /MyPartitionName, when stat-ed, is shown as a "weird file". hrev27358. Don't know what should I check for.

Attachments (5)

media-1.txt (216.4 KB) - added by Adek336 10 years ago.
dumpe2fs /dev/hda9 : partition not mountable
adipe.txt (350.1 KB) - added by Adek336 10 years ago.
dumpe2fs /dev/sda6: mountable
debian.txt (127.5 KB) - added by Adek336 10 years ago.
dumpe2fs /dev/sda1: mountable
part1.txt (46.1 KB) - added by Adek336 10 years ago.
lenovo laptop: dumpe2fs /dev/sda10 : unmountable
part2.txt (174.5 KB) - added by Adek336 10 years ago.
lenovo laptop: dumpe2fs /dev/sda8 : unmountable

Download all attachments as: .zip

Change History (17)

comment:1 Changed 10 years ago by Adek336

Well, it doesn't happen anymore for a 2-3 weeks now.

comment:2 Changed 10 years ago by Adek336

I mean, it doesn't happen in revisions which are more recent than 2-3 weeks old.

comment:3 Changed 10 years ago by Adek336

I think it works for even more, say like 4-5 weeks (not 2-3). Anyway I have an old hrev27770 real hardware install with this problem.

comment:4 Changed 10 years ago by Adek336

The previous comments are partially wrong. On my laptop, I still can't mount partitions even on hrev28242, /mypartition is "weird file".

On my desktop computer I can mount partitions for about 4-5 weeks now, however some older revisions also had problems - like in hrev27000 (however here it says /mypartition is "directory" not "weird file", but still doesn't work

/mypartition>ls
ls: cannot open directory .: Is a directory
}}})

comment:5 Changed 10 years ago by Adek336

I have a computer with two ext3 partitions that mount in Haiku and one that doesn't. All three mount in linux. The two mountable partitions have st_mode == 0x41ed, and the value is read from the disk. The other partition, Haiku reads, I think, the wrong block and interprets "0" as it's st_mode, so it is later recognized as a weird file.

Using DiskProbe I found that the good partitions have hexadecimal "ed 41" in block 0x2018, one partition in offset 0x80, the other partition in offset 0x100 into the block. The wrong partition has hexadecimal "ed 41" in block 0x1678, offset 0x80.

For all 3 partitions, in the ext2 module, in Volume::Mount(), deeper in Inode::Inode(), deeper in ext2_get_vnode(), block_cache_get() is called with block == 0x403 I think.

Changed 10 years ago by Adek336

Attachment: media-1.txt added

dumpe2fs /dev/hda9 : partition not mountable

Changed 10 years ago by Adek336

Attachment: adipe.txt added

dumpe2fs /dev/sda6: mountable

Changed 10 years ago by Adek336

Attachment: debian.txt added

dumpe2fs /dev/sda1: mountable

Changed 10 years ago by Adek336

Attachment: part1.txt added

lenovo laptop: dumpe2fs /dev/sda10 : unmountable

Changed 10 years ago by Adek336

Attachment: part2.txt added

lenovo laptop: dumpe2fs /dev/sda8 : unmountable

comment:6 Changed 10 years ago by Adek336

Among the unmountable, both small (~1Gb) and large (~100Gb) partitions appear.

All unmountable partitions have ext_attr feature, no mountable partition has.

All the unmountable partitions have been created recently with gparted under a recent Debian Linux. All the mountable partitions are older and have been created with various tools under Debian.

I think this may be reproducible with a partition made under a recent Debian and gparted.

comment:7 Changed 10 years ago by Adek336

fixed it. My partitions had an inode size of 0x100 instead of the more common 0x80. Now I can mount the partition and see the names of the files. Unfortunately, the sizes and contents of the files are not read correctly - probably the same problem as below but in another place in the code.

Inodes.cpp:

-     fNode = inodes + volume->InodeBlockIndex(id);
+     fNode = (struct ext2_inode*)   (   ((char*)inodes)  +   volume->InodeBlockIndex(id)  *  volume->SuperBlock().inode_size   );

comment:8 Changed 10 years ago by Adek336

Now that it mounts and file names can be read, filesizes not, it is easy to get a page fault in kernel space so pointer arithmetic needs more checking.

comment:9 Changed 10 years ago by Adek336

Volume.cpp

300   -     fInodesPerBlock = fBlockSize / sizeof(ext2_inode); 
300   +     fInodesPerBlock = fBlockSize / SuperBlock().inode_size; 

this seems to fix a bit, but when reading some files I get trash.

comment:10 Changed 10 years ago by axeld

Component: - GeneralFile Systems/ext2

Thanks for looking into this! I've applied similar changes in hrev28536 (your version was not endian-safe, BTW).

Let's keep this ticket open until reading files is working as well.

comment:11 Changed 10 years ago by Adek336

I though reading didn't work when MediaPlayer couldn't play movies but I've checked that after all reading works always well.

comment:12 Changed 10 years ago by axeld

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.