Linuxシステムをメモリ上でのみ実行するために、ハードドライブのインストールからsquashfsライブシステムを生成するシェルスクリプトを作成しました。
しかし、toramライブシステムを実行すると、dmesgで次のエラーが発生します。
systemd[1]: Failed to open /dev/shm device, ignoring: Inappropriate ioctl for device
このエラーにもかかわらず、トーラムライブシステムは問題なく実行されているようです。
squashfsはACLをサポートしていませんが、/media/username/ディレクトリにはACLが必要なため、このスクリプトはインストールされているLinux上でユーザーを1人だけ作成した場合にのみ機能します。
スクリプトは次のとおりです。
#!/bin/bash
# Destination directory:
DEST=$HOME/squashfs
sudo mkdir -p ${DEST}
# Copying installation in destination directory:
sudo rsync --progress --specials --perms -av -lXEog --delete / ${DEST} --one-file-system \
--exclude=/proc/* --exclude=/tmp/* --exclude=/dev/* \
--exclude=/sys/* --exclude=/boot/* \
--exclude=/etc/mtab --exclude=${DEST}
# Make /media/username ownership to the user, because squashfs doesn't support ACL
MEDIA="$USER:$USER $DEST/media/$USER"
sudo chown $MEDIA
# Remove links to mounted drives in destination directory /media/username/:
MEDIA="$DEST/media/$USER"
sudo rm -f $MEDIA/*
# Remove unwanted entries in fstab of the future live system:
sudo sed -i '/\/boot\/efi/d' ${DEST}/etc/fstab
sudo sed -i '/swap/d' ${DEST}/etc/fstab
sudo sed -i '/UUID=.*\ \/\ /d' ${DEST}/etc/fstab
# Mount special files in order to chroot:
sudo mount -o bind /proc ${DEST}/proc
sudo mount -o bind /dev ${DEST}/dev
sudo mount -o bind /dev/pts ${DEST}/dev/pts
sudo mount -o bind /sys ${DEST}/sys
sudo cp /etc/resolv.conf ${DEST}/etc/resolve.conf
# upgrade the chrooted system, and install live-boot package
# as well as the lastest kernel:
sudo chroot ${DEST} apt-get update
sudo chroot ${DEST} apt-get upgrade
sudo chroot ${DEST} apt-get remove linux-image*
sudo chroot ${DEST} apt-get install live-boot
sudo chroot ${DEST} apt-get install linux-image-amd64
sudo chroot ${DEST} apt-get clean
sudo chroot ${DEST} apt clean
# Umount the special files:
sudo umount ${DEST}/proc
sudo umount ${DEST}/dev/pts
sudo umount ${DEST}/dev
sudo umount ${DEST}/sys
# Delete unwanted files:
[ -n "$DEST" ] && sudo find ${DEST}/var/mail ${DEST}/var/lock ${DEST}/var/backups ${DEST}/var/tmp -type f -exec rm {} \;
# Delete only OLD log files:
[ -n "$DEST" ] && sudo find ${DEST}/var/log -type f -iregex '.*\.[0-9].*' -exec rm -v {} \;
[ -n "$DEST" ] && sudo find ${DEST}/var/log -type f -iname '*.gz' -exec rm -v {} \;
# Clean current log files:
[ -n "$DEST" ] && sudo find ${DEST}/var/log -type f | while read file; do echo -n '' | sudo tee $file; done
# Clean Pakcage cache:
[ -n "$DEST" ] && sudo rm -v ${DEST}/var/cache/apt/archives/*.deb
# Remove old kernel and initrd in the partition where will be installed the live system:
sudo rm -f /media/$USER/LIVE/live/initrd.img*
sudo rm -f /media/$USER/LIVE/live/vmlinuz*
# Copy new kernel and initrd in the partition where will be installed the live system:
sudo mv -f ${DEST}/boot/initrd.img* /media/$USER/LIVE/live/initrd.img
sudo mv -f ${DEST}/boot/vmlinuz* /media/$USER/LIVE/live/vmlinuz
# Remove old shquashfs in the partition where will be installed the live system:
sudo rm -f /media/$USER/LIVE/live/filesystem.squashfs
# Make the new squashfs:
sudo mksquashfs ${DEST} /media/$USER/LIVE/live/filesystem.squashfs -xattrs -processors 4 -noappend -always-use-fragments
`/media/$USER/LIVE/` is where the live system partition is mounted.
Then I boot the live system placed on a partition with the kernel options: `toram boot=live`
編集する:
コマンドを実行すると、インストールされているとdf
表示されます。/dev/shm
/run/live/medium
このコマンドは、もインストールされてmount | grep medium
いることを知らせます。/dev/shm
/usr/lib/live/mount/medium
システムはRAMにsquashfsを含むパーティションのコピーを保持しているようです。
を削除しようとすると、/run/live/medium
削除できないというメッセージが表示されますthe target is active
。しかし、正常に削除しました/usr/lib/live/mount/medium
。
それで、これらの問題が関連しているのか、それを取り除く方法があるのか疑問に思います/run/live/medium
。
答え1
/dev/shm
これは通常tmpfsまたはRAMディスクであるため、一般的ではない環境でのインストールは問題になる可能性があります。systemd
完全なRAMディスク環境では、RAMディスクfsが必要ないため問題にならないので、これを正しく無視しました。
答え2
次の2つのコマンドを追加してエラーを削除してみてください。# Mount Special Files Section
sudo test -L /dev/shm && sudo rm /dev/shm && sudo mkdir /dev/shm
sudo chmod 1777 /dev/shm
望むより:Gentoo Wiki:必要なファイルシステムをインストールする
上記のリンクのコマンドを使用してchrootを一度だけ入力することをお勧めします。
答え3
これはライブスタートのバグが原因で発生します。エラーは次のとおりです。アップストリームが修正されました。しかし、リリースには少し時間がかかります。その間、エラーログを無視してもかまいません(有害ではありません)。または直接パッチを適用することもできます。
if [ -f ${DEST}/lib/live/boot/9990-toram-todisk.sh ]; then
sed -i 's|dev="/dev/shm"|dev="tmpfs"|g' ${DEST}/lib/live/boot/9990-toram-todisk.sh
fi
バグの説明:live-bootはtmpfsを/dev/shm
デバイス名でマウントします。ただし、tmpfsには実際にはデフォルトのデバイスがないため、デバイス名として何でも使用できます。一般的にtmpfs
使用します。これを使用すると、systemdはデバイスとして開こう/dev/shm
としますが、デバイスではないため失敗して混乱します。/dev/shm
/dev/shm