Хорошо, это действительно странная проблема, возникающая в двух системах Raspberry Pi с соответствующими картами памяти SD объемом 8 ГБ:
Простой пример: когда я записываю файлы на диск, похоже, что файлы записываются.
Я могу отредактировать файл vim test.dat
, ввести в него текст, сохранить.
ll перечислит файл.
cat покажет содержимое файла. После перезагрузки файл исчезнет.
Я думаю, что происходит то, что Ubuntu записывает файлы в дисковый кеш Ubuntu, но не записывает файлы на диск. Программы пользовательского пространства могут продолжить чтение файлов и их использование, но кеш возвращает списки каталогов и содержимое файлов из оперативной памяти, а не с диска. Потому что после перезагрузки на диске нет новых данных.
Другой пример:
dd if=/dev/zero of=testfile.dat bs=1M count=1000
Он создает файл размером 1 ГБ. дадим список файлов. df -h показывает, что данные на диске были использованы еще на 1 ГБ. Но после перезагрузки файл исчезает, и df -h показывает старое доступное пространство.
Забавный факт: я знаю, что максимальная скорость записи SD-карты составляет 9 МБ / с, и это то, что я получаю, когда записываю на нее образ диска, используя свой ноутбук. Но, выполнив эту команду dd на SD-карте в raspberry, dd сообщает о скорости записи как 110 МБ / с. Невозможно. Вот почему я думаю, что операционная система просто пишет в ОЗУ, а не записывает на диск.
Третий пример: у меня есть скрипт, который редактирует файл с именем interfaces, а затем копирует его в качестве пользователя root в файл / etc / network / interfaces для изменения IP-адреса устройства. Затем скрипт перезагружается.
#!/bin/bash
cp /var/project/scripts/interfaces /etc/network/interfaces
/sbin/reboot
После перезагрузки устройство все еще имеет свой старый IP-адрес ... Странно ...
Четвертый пример: малина запускает базу данных percona. У меня есть таблица, которая содержит 186 записей. Я усекаю таблицу. Посмотрите на данные, используя код php, а также используя webmin - таблица пуста, как и должно быть. После перезагрузки данные вернулись. Действительно ... 186 записей. Это меня бесит.
1115 Я могу быть совершенно неправ. Есть идеи?
Я работал над этой установкой Ubuntu и периодически создавал резервные копии, клонируя образ диска после каждого крупного обновления программного обеспечения. Я замечал странные вещи (например, IP не меняется после запуска моего скрипта), но я не осознавал эту проблему до сегодняшнего дня, похоже, что все клонированные образы дисков, которые я обнаружил, имеют эту проблему. Должно быть, он работал до определенного момента, а затем что-то пошло не так с Ubuntu на пи ...
Вопрос: Что я могу сделать, чтобы убунту записал на SD-карту?
То, что, казалось, помогло мне, использовало синхронизирующую команду:
sync
От справки:
Сила изменила блоки на диск, обновите супер блок.
Это сбрасывает буферы файловой системы, другими словами. Однако я ожидал бы, что, когда Вы делаете надлежащее sudo reboot
в отличие от меня, это не было бы никакой проблемой, и следовательно синхронизация не могла бы работать на Вас..
у меня были подобные проблемы с Raspbian хрипящая установка. Это имеет ext4 раздел, содержащий файловую систему, которая только для чтения. И небольшой раздел чтения-записи с FAT32, содержащим некоторый configfiles. Когда я изменил файл конфигурации и затем вытянул разъем питания для перезапуска изменений, не были персистентными. (имейте в виду: без Pi только для чтения, вытягивая разъем питания не была бы умная вещь сделать так или иначе)
У меня такая же проблема с картой Samsung EVO 18G MicroSD. Многие люди обсуждали этот вопрос на малиновом форуме здесь: https://www.raspberrypi.org/forums/viewtopic.php?t=21330#p992573
Скорее всего, SD-карта повреждена.
Я столкнулся с точно такой же проблемой. Я решил эту проблему, выполнив следующие шаги:
ШАГ 1: Соблюдайте значение, указанное после root=PARTUUID=
из /boot/cmdline.txt
:
кошка /загрузка/cmdline
В моем случае я нашел что-то вроде 093bedcc-02
:
boot=overlay console=tty1 root=PARTUUID=093bedcc-02 rootfstype=ext4 lift=deadline fsck.repair=yes rootwait
ШАГ 2: Найдите PATH с указанным значением root=PARTUUID=
из предыдущего шага с lsblk
(подробнее читайте man lsblk
для форматирования вывода):
lsblk -o NAME,FSTYPE,LABEL,UUID,PARTUUID,MOUNTPOINT,PATH
В моем случае я получил что-то вроде:
NAME FSTYPE LABEL UUID PARTUUID MOUNTPOINT PATH
mmcblk0 /dev/mmcblk0
├─mmcblk0p1 vfat boot BC50-2AE4 093bedcc-01 /boot /dev/mmcblk0p1
└─mmcblk0p2 ext4 rootfs 9b87f948-9dc3-49e7-94fc-309bfabb1ac4 093bedcc-02 / /dev/mmcblk0p2
В моем случае я получил значение PATH как /dev/mmcblk0p2
.
ШАГ 3: Теперь замените root=PARTUUID=
на его значение PATH (в моем случае /dev/mmcblk0p2
), добавив перед ним root=
. ]:
root=/dev/mmcblk0p2
ШАГ 4: Наконец, перезагрузите систему с помощью следующей команды:
sudo reboot