L'écriture sur une partition formatée en HFS+ n'est possible que si la journalisation a été désactivée sur cette partition. Sinon, celle-ci est montée en lecture seule.
Le but de ce tutoriel est de fournir un moyen de désactiver la journalisation sur une partition HFS+ sous linux.
Prérequis.
Il faut disposer de gcc sur la machine. Si celui-ci n'est pas installé, il faut taper dans un terminal
sudo apt install gcc
Puis, il faut entrer le code suivant dans un fichier (j'ai choisi le nom "disable_journal_hfsplus.c", mais n'importe quel nom convient. Il suffit d'adapter la commande en conséquence).
De plus, je me dois de préciser que ce code n'est pas de moi.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <byteswap.h>
int main(int argc, char *argv[])
{
int fd = open(argv[1], O_RDWR);
if(fd < 0) {
perror("open");
return -1;
}
unsigned char *buffer = (unsigned char *)mmap(NULL, 2048, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(buffer == (unsigned char*)0xffffffff) {
perror("mmap");
return -1;
}
if((buffer[1024] != 'H') && (buffer[1025] != '+')) {
fprintf(stderr, "%s: HFS+ signature not found -- aborting.\n", argv[0]);
return -1;
}
unsigned long attributes = *(unsigned long *)(&buffer[1028]);
attributes = bswap_32(attributes);
printf("attributes = 0x%8.8lx\n", attributes);
if(!(attributes & 0x00002000)) {
printf("kHFSVolumeJournaledBit not currently set in the volume attributes field.\n");
}
attributes &= 0xffffdfff;
attributes = bswap_32(attributes);
*(unsigned long *)(&buffer[1028]) = attributes;
buffer[1032] = '1';
buffer[1033] = '0';
buffer[1034] = '.';
buffer[1035] = '0';
buffer[1036] = 0;
buffer[1037] = 0;
buffer[1038] = 0;
buffer[1039] = 0;
printf("journal has been disabled.\n");
return 0;
}
Le contenu du fichier peut facilement être vérifié avec la commande
cat disable_journal_hfsplus.c
Une fois que cela est réalisé, il suffit de compiler ce programme (pour ceux pour qui c'est la première compilation, vous verrez que ce n'est pas si compliqué).
gcc disable_journal_hfsplus.c -o disable_journal_hfsplus
Et voilà, vous disposez de l'utilitaire qui va vous permettre de désactiver le journal.
Maintenant, si votre partition HFS+ est accessible en /dev/sdd2 (par exemple, le nom de "device" est à adapter selon votre configuration propre), il suffit de taper dans le terminal
sudo disable_journal_hfsplus /dev/sdd2
Et ça y est, la journalisation a été désactivée.
Maintenant, il suffit de démonter la partition
sudo umount /dev/sdd2
puis de la remonter
sudo mount /dev/sdd2
Et vous pouvez écrire dedans.
De même, si la partition contient des erreurs, il suffit :
1) d'installer le paquet hfsprogs
sudo apt install hfsprogs
2) de taper
sudo fsck.hfsplus /dev/sdd2
bien entendu toujours en adaptant le "/dev/xxx" à votre configuration personnelle.
Et la partition est réparée.
Amicalement.
Jean-Marie