Как "установить" мою собственную файловую систему на мой 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