Erreur grub filesystem FAT

une erreur au démarrage

a marqué ce sujet comme résolu.

Salut les zestes ! :D

Lorsque je lance mon ordinateur portable sous Fedora, au démarrage au même moment que l’affichage du logo du constructeur, il y a en haut à gauche

error: ../../grub-core/fa/fat.c:447: not a FAT filesystem

En soit je n’ai eut aucun problème par la suite depuis que je vois ce message (~2 semaines je dirai) mais j’aimerai quand même savoir à quoi ça pourrait être dû (en plus c’est grub…)

Merci d’avance les agrumes ! :zorro:

EDIT: si vous avez besoin d’une information en plus, faites moi signe ;)

+0 -0

Salut \o

Hummm … regardes les sources de grub.
On retrouves cette fonction :

static struct grub_fat_data *
grub_fat_mount (grub_disk_t disk)
{
  struct grub_fat_bpb bpb;
  struct grub_fat_data *data = 0;
  grub_uint32_t first_fat, magic;

  if (! disk)
    goto fail;

  data = (struct grub_fat_data *) grub_malloc (sizeof (*data));
  if (! data)
    goto fail;

  /* Read the BPB.  */
  if (grub_disk_read (disk, 0, 0, sizeof (bpb), &bpb))
    goto fail;

  if (grub_strncmp((const char *) bpb.version_specific.fat12_or_fat16.fstype, "FAT12", 5)
      && grub_strncmp((const char *) bpb.version_specific.fat12_or_fat16.fstype, "FAT16", 5)
      && grub_strncmp((const char *) bpb.version_specific.fat32.fstype, "FAT32", 5))
    goto fail;

  /* Get the sizes of logical sectors and clusters.  */
  data->logical_sector_bits =
    fat_log2 (grub_le_to_cpu16 (bpb.bytes_per_sector));
  if (data->logical_sector_bits < GRUB_DISK_SECTOR_BITS)
    goto fail;
  data->logical_sector_bits -= GRUB_DISK_SECTOR_BITS;

  data->cluster_bits = fat_log2 (bpb.sectors_per_cluster);
  if (data->cluster_bits < 0)
    goto fail;
  data->cluster_bits += data->logical_sector_bits;

  /* Get information about FATs.  */
  data->fat_sector = (grub_le_to_cpu16 (bpb.num_reserved_sectors)
              << data->logical_sector_bits);
  if (data->fat_sector == 0)
    goto fail;

  data->sectors_per_fat = ((bpb.sectors_per_fat_16
                ? grub_le_to_cpu16 (bpb.sectors_per_fat_16)
                : grub_le_to_cpu32 (bpb.version_specific.fat32.sectors_per_fat_32))
               << data->logical_sector_bits);
  if (data->sectors_per_fat == 0)
    goto fail;

  /* Get the number of sectors in this volume.  */
  data->num_sectors = ((bpb.num_total_sectors_16
            ? grub_le_to_cpu16 (bpb.num_total_sectors_16)
            : grub_le_to_cpu32 (bpb.num_total_sectors_32))
               << data->logical_sector_bits);
  if (data->num_sectors == 0)
    goto fail;

  /* Get information about the root directory.  */
  if (bpb.num_fats == 0)
    goto fail;

  data->root_sector = data->fat_sector + bpb.num_fats * data->sectors_per_fat;
  data->num_root_sectors
    = ((((grub_uint32_t) grub_le_to_cpu16 (bpb.num_root_entries)
     * GRUB_FAT_DIR_ENTRY_SIZE
     + grub_le_to_cpu16 (bpb.bytes_per_sector) - 1)
    >> (data->logical_sector_bits + GRUB_DISK_SECTOR_BITS))
       << (data->logical_sector_bits));

  data->cluster_sector = data->root_sector + data->num_root_sectors;
  data->num_clusters = (((data->num_sectors - data->cluster_sector)
             >> (data->cluster_bits + data->logical_sector_bits))
            + 2);

  if (data->num_clusters <= 2)
    goto fail;

  if (! bpb.sectors_per_fat_16)
    {
      /* FAT32.  */
      grub_uint16_t flags = grub_le_to_cpu16 (bpb.version_specific.fat32.extended_flags);

      data->root_cluster = grub_le_to_cpu32 (bpb.version_specific.fat32.root_cluster);
      data->fat_size = 32;
      data->cluster_eof_mark = 0x0ffffff8;

      if (flags & 0x80)
    {
      /* Get an active FAT.  */
      unsigned active_fat = flags & 0xf;

      if (active_fat > bpb.num_fats)
        goto fail;

      data->fat_sector += active_fat * data->sectors_per_fat;
    }

      if (bpb.num_root_entries != 0 || bpb.version_specific.fat32.fs_version != 0)
    goto fail;
    }
  else
    {
      /* FAT12 or FAT16.  */
      data->root_cluster = ~0U;

      if (data->num_clusters <= 4085 + 2)
    {
      /* FAT12.  */
      data->fat_size = 12;
      data->cluster_eof_mark = 0x0ff8;
    }
      else
    {
      /* FAT16.  */
      data->fat_size = 16;
      data->cluster_eof_mark = 0xfff8;
    }
    }

  /* More sanity checks.  */
  if (data->num_sectors <= data->fat_sector)
    goto fail;

  if (grub_disk_read (disk,
              data->fat_sector,
              0,
              sizeof (first_fat),
              &first_fat))
    goto fail;

  first_fat = grub_le_to_cpu32 (first_fat);

  if (data->fat_size == 32)
    {
      first_fat &= 0x0fffffff;
      magic = 0x0fffff00;
    }
  else if (data->fat_size == 16)
    {
      first_fat &= 0x0000ffff;
      magic = 0xff00;
    }
  else
    {
      first_fat &= 0x00000fff;
      magic = 0x0f00;
    }

  /* Serial number.  */
  if (bpb.sectors_per_fat_16)
    data->uuid = grub_le_to_cpu32 (bpb.version_specific.fat12_or_fat16.num_serial);
  else
    data->uuid = grub_le_to_cpu32 (bpb.version_specific.fat32.num_serial);

  /* Ignore the 3rd bit, because some BIOSes assigns 0xF0 to the media
     descriptor, even if it is a so-called superfloppy (e.g. an USB key).
     The check may be too strict for this kind of stupid BIOSes, as
     they overwrite the media descriptor.  */
  if ((first_fat | 0x8) != (magic | bpb.media | 0x8))
    goto fail;

  /* Start from the root directory.  */
  data->file_cluster = data->root_cluster;
  data->cur_cluster_num = ~0U;
  data->attr = GRUB_FAT_ATTR_DIRECTORY;
  return data;

 fail:

  grub_free (data);
  grub_error (GRUB_ERR_BAD_FS, "not a FAT filesystem");
  return 0;
}

Bon du coup, on se rend compte que c’est une erreur assez générique qui désigne qu’il y a eu un problème dans cette fonction.

En gros, le BPB donne des informations que grub ne trouve pas cohérente (où alors il y a un problème d’allocation…). Ça peut venir du BIOS (stupid BIOSes ! 🤣) ou du support en lui même qui est mal « configuré ».

Vérifie que tu n’as pas une clé branchée à ton PC. Sachant que parfois, d’autres périphériques USB se permettent de faire également clé USB (pour stocker leur configuration par exemple), c’est le cas de certaine clé 4G.


Si tu es sous Fédora, tu peux lancer ces commandes et nous donner le résultat.

$ lsblk -f
$ fdisk -l
# parted -l

Les trois servent un peu à la même chose. lsblk va lister. Ben les block devices.
fdisk et parted vont lister les partitions. C’est bien d’avoir deux avis différents :p

+0 -0

Il me semble que ça signifie que ton disque dur n’est pas formaté en format FAT.

Bah c’est normal puisque c’est mon disque dur qui est formaté en ext4 (ou quelque chose dans le genre, je saurai pas dire) avec des partitions de boot basique linux.

Vérifie que tu n’as pas une clé branchée à ton PC. Sachant que parfois, d’autres périphériques USB se permettent de faire également clé USB (pour stocker leur configuration par exemple), c’est le cas de certaine clé 4G.

J’ai que une souris avec puce réceptrice USB branché tout le temps mais ça me faisait pqs ça jusqu’à récemment et ni lorsque j’étais sous Windows (j’aurai dû passer sous Linux il y a bien longtemps…)

Si tu es sous Fedora, tu peux lancer ces commandes et nous donner le résultat.

$ lsblk -f
$ fdisk -l
# parted -l

ache

Là j’ai pas accès à mon ordinateur mais dès que je suis dessus je te donne les résultats.

Au fait je l’ai pas précisé dans mon premier message mais j’ai rien trouvé en rapport avec grub dans les logs…

+0 -0

Lorsque je lance mon ordinateur portable sous Fedora, au démarrage au même moment que l’affichage du logo du constructeur, il y a en haut à gauche

Tu vois le logo du constructeur au démarrage ?

En fait depuis Fedora 30 (sorti fin avril), les possesseurs d’une carte graphique Intel récents voient par défaut au démarrage le logo du constructeur. Or ce logo est normalement stocké dans la partition de l’UEFI (/boot/uefi) et cette partition doit être formatée en FAT32.

Donc je suppose que tu vois ce message maintenant car par défaut il tente de récupérer cela depuis une partition FAT alors que s’en est pas une. Rien de grave de toute façon.

+0 -0

Voici les résultats @ache

lsblk -f :

NAME FSTYPE LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINT
sda                                                                     
├─sda1
│    vfat         D277-B19D                               181,9M     9% /boot/efi
├─sda2
│    ext4         cbf0b93a-d45b-4e36-b4c9-bf24d5713040    686,9M    23% /boot
└─sda3
     LVM2_m       ekMg1g-uvhr-i2KV-FBCO-TMO9-kG75-q2EuG5                
  ├─fedora-root
  │  ext4         ae7123c3-a933-469e-8fa9-cfcf818604af     35,2G    23% /
  ├─fedora-swap
  │  swap         301e2cbb-92cc-4b99-97ac-d1b2f4c41381                  [SWAP]
  └─fedora-home
     ext4         66f23f7b-3407-4fa1-9b54-ef426c8b5f3f    792,8G     3% /home
sr0                                                                     

fdisk -l:

Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: MODEL
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 7F94E815-CCEE-48FE-A0A9-871C3FA7BC7D

Device       Start        End    Sectors   Size Type
/dev/sda1     2048     411647     409600   200M EFI System
/dev/sda2   411648    2508799    2097152     1G Linux filesystem
/dev/sda3  2508800 1953523711 1951014912 930,3G Linux LVM

Disk /dev/mapper/fedora-root: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/mapper/fedora-swap: 6,9 GiB, 7365197824 bytes, 14385152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/fedora-home: 873,5 GiB, 937863151616 bytes, 1831763968 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

parted -l :

Model: DISK (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  211MB   210MB   fat16        EFI System Partition  boot, esp
 2      211MB   1285MB  1074MB  ext4
 3      1285MB  1000GB  999GB                                      lvm

J’espère que ça peut vous aider :ange:

Bon du coup, il n’y a que l’EFI qui pourrait être en cause. Je pense que la piste de Renault est la bonne.

Je pense qu’ils font ça un peu dans le même esprit que Windows/Ubuntu. Plutôt que d’afficher les messages d’initialisation de Grub (et certainement du coup de Linux aussi) il serait capable de continuer à afficher le logo du constructeur. Les messages seraient donc « cacher » (plutôt, pas affiché) jusqu’à l’écran de login.

Ce n’est qu’une supposition mais je pense que l’idée de Renault est la bonne.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte