Is it safe to cut off the power, if I assume that the volume isn't being written to at the moment and there's no stdout/stderr redirection? // If there is stdout/stderr redirection (to a file on the rw partition) on an open process, does that mean that the file is kept open as long as the process is running?
Вы ошибаетесь в том, как Linux обрабатывает ожидающие буферы. Это вообще не связано с открытыми файлами. Буферы могут быть ожидающими, когда процесс, который их создал, давно завершен. Единственный способ убедиться, что все данные находятся на носителе, — размонтировать или перемонтировать только для чтения -файловую систему.
Will shutting off power result in a system integrity check upon reboot?
Файловая система, неправильно размонтированная/перемонтированная только для чтения -, будет обнаружена как грязная при следующем монтировании. Так как это ext4, возможен монтаж такой грязной файловой системы — тогда драйвер прилипнет к журналу. Последние изменения перед отключением питания -теряются.
Вот сценарий, который я буду использовать для форматирования будущих SD-карт, когда они будут работать.
Это прочно основано на этом ответеhttps://unix.stackexchange.com/a/422687/46470
# creates GPT partition table
# creates ext4 file system
# creates file system writable by anyone
# variables
disk_z="mmcblk0"
part_z="p1"
user_z="$USER"
password_z="password"
# issue sudo password so that password is not needed again
echo password_z | sudo -S clear
# make sure the device is not mounted
sudo umount /dev/$disk_z
sudo umount /dev/$disk_z$part_z
# Create partition table with a single full-sized partition
sudo parted -s /dev/$disk_z mklabel gpt
sudo parted /dev/$disk_z unit MiB mkpart primary 1 100%
# Create (1) "ext4" file system partition with (2) "64bit" filesystem
# and (3) name "p1" and (4) disk label "SD_CARD"
sudo mkfs.ext4 -F -O ^64bit -L 'SD_CARD' "/dev/$disk_z$part_z"
# tune2fs adjusts tunable filesystem parameters
# -o calls mount options
# acl enables Posix Access Control Lists to be stored
# in the filesystems metadata
# -o acl will enable the ACL to be set by "setfacl" once
# the partition is mounted and this will be
# stored in the filesystems metadata
sudo tune2fs -o acl "/dev/$disk_z$part_z"
# mount the file system
sudo mount "/dev/$disk_z$part_z" /mnt
# change ownership of the mounted file system
sudo chown "$user_z": /mnt
# chmod it to have rwx permissions for everyone
sudo chmod 777 /mnt
# SET File ACL (access list) permissions for users, groups and owner to rwx in each case
# and store this in the files systems metadata
sudo setfacl -m d:u::rwx,d:g::rwx,d:o::rwx /mnt
# unmount the disk
sudo umount /mnt
Здесь вы стираете карту, создаете таблицу разделов GPT, а затем немедленно перезаписываете таблицу разделов GPT файловой системой. Либо вообще не утруждайте себя созданием таблицы разделов, либо создайте раздел в таблице разделов для файловой системы. Обычно рекомендуется второй подход.
# Create partition table with a single full-sized partition
parted -s /dev/mmcblk0 mklabel gpt
parted /dev/mmcblk0 unit MiB mkpart primary 1 100%
# Print it out (optional)
parted /dev/mmcblk0 unit MiB print
# Create filesystem on the partition we have just made
mkfs.ext4 -L SD_CARD /dev/mmcblk0p1
# Mount it
mkdir -p /mnt/dsk
mount /dev/mmcblk0p1 /mnt/dsk
# Allow anyone to write to it
chmod 777 /mnt/dsk
Это даст вам файловую систему, в которую любой сможет писать. (У файловых систем UNIX/Linux нет владельцев. У файлов и каталогов есть владельцы. )Однако, если вы создаете файл или каталог, он становится вашим, и если вы не разрешите кому-либо писать в него, он не сможет этого сделать. Это стандартное поведение UNIX/Linux, если только оно не изменено с помощью ACL, как в ответе, связанном с
.