Как "установить" мою собственную файловую систему на мой USB?

Если я напишу свою собственную файловую систему (некоторую базовую), Как мне "установить" ее на мой USB?, Допустим, я написал хеш-таблицу и хочу отформатировать на USB. Как мне это сделать? Моя ОС - Ubuntu x86_64.

1 ответ

Я бы порекомендовал вам сначала поиграть с новыми файловыми системами, записав их в файлы, а не на устройства. Это облегчит вашу разработку и тестирование.

 # create a 4MB file called 'myfs' with just zeros
 dd if=/dev/zero of=myfs bs=1 count=0 seek=4M
 # then use your tool to create the custom filesystem on myfs

Когда ваша файловая система записана в файл, вы можете скопировать ее на USB-ключ. Если вы подключите USB-накопитель / ключ, сценарии событий назначат ему имя устройства. Вам понадобится имя устройства, чтобы установить на нем собственную файловую систему. Вы можете получить его имя, посмотрев на dmesg после того, как вы подключите его.

# plug in the USB key and wait 2 seconds
$ dmesg | less
# hit shift+G to see the end of the file, q to quit

Для устройства чтения карт USB вы увидите что-то вроде:

[  740.925402] usb 2-2: new high-speed USB device number 3 using ehci-pci
[  741.061264] usb 2-2: New USB device found, idVendor=05e3, idProduct=0732
[  741.061270] usb 2-2: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[  741.061275] usb 2-2: Product: USB Reader
[  741.061278] usb 2-2: Manufacturer: Genesys 
[  741.061282] usb 2-2: SerialNumber: 000000000712
[  741.340371] usb-storage 2-2:1.0: USB Mass Storage device detected
...
[  742.380447] sd 6:0:0:1: [sdf] Attached SCSI removable disk

Файл /dev/sdf здесь позволит непосредственно взаимодействовать с тем, что хранится на карте памяти. Вы должны быть осторожны, чтобы выбрать узел устройства для ключа USB, а не, скажем, жесткий диск, от которого вы зависите. Если на этой карте памяти есть таблица разделов, разделы будут доступны в /dev/sdf[n] где n - номер раздела. Ubuntu автоматически монтирует файловые системы, которые она распознает под /media/<username>/<label>, Чтобы поиграться с вашим собственным форматом файловой системы, скорее всего, вам придется umount те первые.

Вы можете скопировать свою файловую систему в файл myfs на ключ USB, используя dd инструмент:

# WARN: backup your files on the key, because this is a very
#       destructive operation.

# directly on the device (no partition table)
$ sudo dd if=myfs of=/dev/sdf

# -- OR --

# if you have a partition table, you could write it only to one
# of the partitions e.g.:
$ sudo fdisk /dev/sdf  # create the partitions
$ sudo dd if=myfs of=/dev/sdf1  # for the first partition

Регистрация новой пользовательской файловой системы

Вы можете реализовать новые файловые системы с FUSE, что позволит вам делать такие вещи, как:

# mycustomfs is a program you write in the language you want.
# myfs is your filesystem in a file.
# /mnt/contents could be the target where you want the fs to be mounted
$ mycustomfs myfs  /mnt/contents/

Вот учебник для FS, написанный на Ruby: https://www.debian-administration.org/article/619/Creating_Filesystems_with_Ruby__and_FUSE

И как только у вас это заработает, вы можете зарегистрировать новую пользовательскую файловую систему, чтобы mount знает, что с этим делать. См.: https://stackoverflow.com/questions/1554178/how-to-register-fuse-filesystem-type-with-mount8-and-fstab

Другие вопросы по тегам