Commit 89439d4
authored
fix: support fat32 on 4k native disks (#316)
This fixes the issue that `GetFilesystem()` fails on vfat created on disks with 4k sector size.
`mkfs.vfat` uses 4k size when disk is native 4k.
This can be reproduced by creating a loopback device with 4k sectors and running mkfs.vfat on it.
```bash
truncate -s 10M /tmp/vfat_4k.img
sudo losetup -f --show -b 4096 /tmp/vfat_4k.img
sudo mkfs.vfat -F 32 -n TEST4K /dev/loop0
sudo losetup -d /dev/loop0
```
Then can be tested as:
```go
package main
import (
"github.com/diskfs/go-diskfs"
"github.com/diskfs/go-diskfs/backend/file"
"github.com/stretchr/testify/require"
)
func main() {
// Open the image file created with 4K sectors
bk, err := file.OpenFromPath("/tmp/vfat_4k.img", false)
require.NoError(err, "failed to open image file")
defer bk.Close()
// Try to open the disk
diskInfo, err := diskfs.OpenBackend(bk, diskfs.WithOpenMode(diskfs.ReadWriteExclusive))
require.NoError(err, "failed to open backend")
defer diskInfo.Close()
// This will fail with unpatched go-diskfs:
// "unknown filesystem on partition 0"
// Because go-diskfs rejects bytesPerSector != 512
fs, err := diskInfo.GetFilesystem(0)
require.NoError(err, "failed to get filesystem from partition 0")
defer fs.Close()
}
```
When mkfs.vfat formats a device with 4K logical sectors, it writes bytesPerSector=4096 in the BPB, which go-diskfs rejects.
Signed-off-by: Noel Georgi <[email protected]>1 parent 58541aa commit 89439d4
File tree
5 files changed
+43
-18
lines changed- filesystem/fat32
- testdata
5 files changed
+43
-18
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
199 | 200 | | |
200 | 201 | | |
201 | 202 | | |
202 | | - | |
203 | | - | |
204 | | - | |
| 203 | + | |
205 | 204 | | |
206 | 205 | | |
207 | 206 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
| 29 | + | |
28 | 30 | | |
29 | | - | |
30 | | - | |
| 31 | + | |
| 32 | + | |
31 | 33 | | |
32 | | - | |
| 34 | + | |
33 | 35 | | |
34 | 36 | | |
35 | 37 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
341 | 341 | | |
342 | 342 | | |
343 | 343 | | |
344 | | - | |
345 | | - | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
346 | 348 | | |
347 | 349 | | |
348 | 350 | | |
349 | 351 | | |
350 | | - | |
351 | | - | |
| 352 | + | |
| 353 | + | |
352 | 354 | | |
353 | | - | |
354 | 355 | | |
| 356 | + | |
| 357 | + | |
355 | 358 | | |
356 | 359 | | |
357 | 360 | | |
358 | 361 | | |
| 362 | + | |
| 363 | + | |
359 | 364 | | |
360 | | - | |
| 365 | + | |
361 | 366 | | |
362 | 367 | | |
363 | | - | |
| 368 | + | |
364 | 369 | | |
365 | 370 | | |
| 371 | + | |
366 | 372 | | |
367 | | - | |
| 373 | + | |
368 | 374 | | |
369 | 375 | | |
370 | 376 | | |
| |||
392 | 398 | | |
393 | 399 | | |
394 | 400 | | |
395 | | - | |
| 401 | + | |
396 | 402 | | |
397 | 403 | | |
398 | 404 | | |
| |||
994 | 1000 | | |
995 | 1001 | | |
996 | 1002 | | |
997 | | - | |
998 | 1003 | | |
999 | 1004 | | |
1000 | 1005 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
111 | 111 | | |
112 | 112 | | |
113 | 113 | | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
114 | 133 | | |
115 | 134 | | |
116 | 135 | | |
| |||
1249 | 1268 | | |
1250 | 1269 | | |
1251 | 1270 | | |
1252 | | - | |
1253 | 1271 | | |
1254 | 1272 | | |
1255 | 1273 | | |
| |||
1406 | 1424 | | |
1407 | 1425 | | |
1408 | 1426 | | |
1409 | | - | |
1410 | 1427 | | |
1411 | 1428 | | |
1412 | 1429 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
| 20 | + | |
19 | 21 | | |
20 | 22 | | |
21 | 23 | | |
| |||
0 commit comments