Raspberry Pi: Файловая система записывает файлы, но после перезагрузки старые данные возвращаются

Хорошо, это действительно странная проблема, возникающая в двух системах 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-карту?

3
задан 8 April 2016 в 12:29

3 ответа

То, что, казалось, помогло мне, использовало синхронизирующую команду:

sync

От справки:

Сила изменила блоки на диск, обновите супер блок.

Это сбрасывает буферы файловой системы, другими словами. Однако я ожидал бы, что, когда Вы делаете надлежащее sudo reboot в отличие от меня, это не было бы никакой проблемой, и следовательно синхронизация не могла бы работать на Вас..

у меня были подобные проблемы с Raspbian хрипящая установка. Это имеет ext4 раздел, содержащий файловую систему, которая только для чтения. И небольшой раздел чтения-записи с FAT32, содержащим некоторый configfiles. Когда я изменил файл конфигурации и затем вытянул разъем питания для перезапуска изменений, не были персистентными. (имейте в виду: без Pi только для чтения, вытягивая разъем питания не была бы умная вещь сделать так или иначе)

0
ответ дан 8 April 2016 в 22:29
  • 1
    Огромное спасибо! Didn' t хотят быть уничтоженными в течение моей первой недели стажировки – firepod 17 August 2017 в 10:23

У меня такая же проблема с картой Samsung EVO 18G MicroSD. Многие люди обсуждали этот вопрос на малиновом форуме здесь: https://www.raspberrypi.org/forums/viewtopic.php?t=21330#p992573

Скорее всего, SD-карта повреждена.

0
ответ дан 13 December 2019 в 15:26

Я столкнулся с точно такой же проблемой. Я решил эту проблему, выполнив следующие шаги:

  • ШАГ 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
    
0
ответ дан 18 March 2020 в 01:35

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

Похожие вопросы: