私はフォローアップをしています。このガイド私のUbuntu AzureホスティングVMでは/mnt/
。実行すると、次のエラーメッセージが表示され続けますsudo mkdir /mnt/test/
。
mkdir: cannot create directory ‘/mnt/test/’: Operation not permitted
これを試みると、わずかに異なるエラーメッセージが表示されましたcd /mnt/
。
-bash: cd: /mnt/: Permission denied
次のステップはディレクトリの権限を確認することでしたので、実行して次のようにsudo stat /mnt/
しました。
File: /mnt/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 2 Links: 6
Access: (0444/dr--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-02-17 14:19:48.658231668 +0000
Modify: 2021-02-08 12:34:19.906967600 +0000
Change: 2021-02-09 09:40:12.287101300 +0000
Birth: -
書き込み権限がないことを知って実行しましたが、次のsudo chmod 664 /mnt/
エラーメッセージが表示されました。
chmod: changing permissions of '/mnt/': Operation not permitted
私はUnixに初めて触れたので、どうすればいいのかわかりません。追加のトラブルシューティング手順や解決策を教えてください。ありがとうございます。
コメントへの回答:
df /mnt
出力:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 32894736 49192 31151544 1% /mnt
grep | '/mnt'
いくつかの編集情報を含む出力:
/dev/sda1 on /mnt type ext4 (rw,relatime,x-systemd.requires=cloud-init.service)
/dev/sda1 on /mnt/sdc1 type ext4 (rw,relatime)
/dev/sdc on /mnt/sdc type ext4 (rw,relatime)
//<azure storage account name>.file.core.windows.net/sih-workspace on /mnt/sih-workspace type cifs (rw,relatime,vers=3.0,cache=strict,username=**********,uid=0,noforceuid,gid=0,noforcegid,addr=<azure data centre IP>,file_mode=0777,dir_mode=0777,soft,persistenthandles,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1)
答え1
ephemeral-disk-warning
.dllを介してファイルを生成する愚かなシステムデバイスを使用してください。/mnt/DATALOSS_WARNING_README.txt
systemctl disable ephemeral-disk-warning.service
理由:
@chris-daviesのおかげで同じ状況に直面しました。コメント:
/mnt自体の他のマウントによって隠された/mntのサブディレクトリに複数のマウントがあるようです。あなたが望むものと期待していないことを決定する必要があります。私の提案は、最初のタスクは/ mntをアンマウントして他のタスクに再公開することです。しかし、私はあなたが使用しているAzureファイルシステムユーティリティについてよく知らないので、これは完全な答えではありません。
$ cat /etc/rc.local
mkdir /mnt/tmp
mount --bind /mnt/tmp /tmp
chmod 1777 /tmp
# shortly after booted
$ l /mnt
total 37K
drwxr-xr-x 5 root root 4.0K Jan 14 08:46 .
drwxr-xr-x 19 root root 26 Jan 14 01:22 ..
drwx------ 2 root root 16K Jan 14 08:46 lost+found
drwxrwxrwt 5 root root 4.0K Jan 14 08:46 tmp
# just after systemd unit `ephemeral-disk-warning.service` started and failed
$ l /mnt
ls: cannot access '/mnt/.': Permission denied
ls: cannot access '/mnt/..': Permission denied
ls: cannot access '/mnt/lost+found': Permission denied
ls: cannot access '/mnt/tmp': Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? lost+found
d????????? ? ? ? ? ? tmp
調査:
$ journalctl --no-pager --boot -g ephemeral
Jan 14 08:46:48 azure systemd[1]: Starting Write warning to Azure ephemeral disk...
Jan 14 08:46:48 azure ephemeral-disk-warning[3758]: /usr/sbin/ephemeral-disk-warning: 7: cannot create /mnt
Jan 14 08:46:48 azure audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=unconfined msg='unit=ephemeral-disk-warning comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Jan 14 08:46:48 azure root[3763]: Added ephemeral disk warning to /mnt
/tmp/DATALOSS_WARNING_README.txt
Jan 14 08:46:48 azure systemd[1]: Finished Write warning to Azure ephemeral disk.
$ journalctl --no-pager --boot -u ephemeral-disk-warning
Jan 14 08:46:48 azure systemd[1]: Starting Write warning to Azure ephemeral disk...
Jan 14 08:46:48 azure ephemeral-disk-warning[3758]: /usr/sbin/ephemeral-disk-warning: 7: cannot create /mnt
Jan 14 08:46:48 azure ephemeral-disk-warning[3758]: /tmp/DATALOSS_WARNING_README.txt: Directory nonexistent
Jan 14 08:46:48 azure systemd[1]: Finished Write warning to Azure ephemeral disk.
Jan 14 08:46:48 azure ephemeral-disk-warning[3761]: chmod: cannot access '/tmp/DATALOSS_WARNING_README.txt': No such file or directory
Jan 14 08:46:48 azure ephemeral-disk-warning[3762]: chattr: No such file or directory while trying to stat /tmp/DATALOSS_WARNING_README.txt
$ systemctl cat ephemeral-disk-warning.service
[Unit]
Description=Write warning to Azure ephemeral disk
After=cloud-config.service
ConditionVirtualization=microsoft
ConditionPathIsMountPoint=/mnt
ConditionPathExists=/dev/disk/azure/resource-part1
[Service]
Type=oneshot
ExecStart=/usr/sbin/ephemeral-disk-warning
RemainAfterExit=yes
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
$ cat /usr/sbin/ephemeral-disk-warning
#!/bin/sh
dev_resource=$(readlink -f /dev/disk/azure/resource-part1)
dev_resource_mp=$(awk '$1==R {print$2}' "R=${dev_resource}" /proc/mounts)
warn_file="${dev_resource_mp}/DATALOSS_WARNING_README.txt"
if [ ! -f "${warn_file}" ]; then
cat > ${warn_file} <<EOM
WARNING: THIS IS A TEMPORARY DISK.
Any data stored on this drive is SUBJECT TO LOSS and THERE IS NO WAY TO
RECOVER IT.
Please do not use this disk for storing any personal or application data.
For additional details to please refer to the MSDN documentation at:
http://msdn.microsoft.com/en-us/library/windowsazure/jj672979.aspx
To remove this warning run:
sudo chattr -i $warn_file
sudo rm $warn_file
This warning is written each boot; to disable it:
echo "manual" | sudo tee /etc/init/ephemeral-disk-warning.override
sudo systemctl disable ephemeral-disk-warning.service
EOM
chmod 0444 ${warn_file}
chattr +i ${warn_file}
logger "Added ephemeral disk warning to ${warn_file}"
fi
$ source <(head -n 4 /usr/sbin/ephemeral-disk-warning)
$ echo $warn_file
/mnt
/tmp/DATALOSS_WARNING_README.txt
$ echo chattr +i ${warn_file}
chattr +i /mnt
/tmp/DATALOSS_WARNING_README.txt
だからこれは別のものです。改行トラップその結果、全体が次/mnt
のように表示されます。不変最後に、古い/etc/rc.local
スタイルの自動実行スクリプトを次のように変換しました。システム装置:
# https://unix.stackexchange.com/questions/471824/what-is-the-correct-substitute-for-rc-local-in-systemd-instead-of-re-creating-rc
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/path/to/the/script.sh
StandardOutput=journal+console
StandardOutput=journal+console
[Unit]
# https://unix.stackexchange.com/questions/635165/unable-to-mkdir-in-mnt-and-cannot-chmod/766859#766859
After=ephemeral-disk-warning.service
After=mnt.mount
Requires=mnt.mount
RequiredBy=anything-requiring-mnt.service
Before=anything-requiring-mnt.service
[Install]
WantedBy=multi-user.target
答え2
/mntにファイルシステムをマウントすると、その下に何も生成できません。 「$df -h /mnt」を実行してテストし、次の自動マップが表示されると想定できます。
マウントされた%を使用して利用可能なファイルシステムサイズを利用可能
/etc/auto.toybox 0 0 0 - /mnt
その場合、自動マウントは自動マッパーのマウントポイントとして/mntを宣言し、/mntの下に作成したいすべての項目は機能しません。そのため許可が拒否されました。
上記の自動マウントが表示されている場合は、自動マウントへの直接マッピングが正しくない可能性があります。 autofs、ypbind man、systemctl の出力を表示します。 ypcat -kコマンドを使用して、auto.masterマッピングが何をするかを確認します。
ypcat -k auto.master や ypcat -k auto.home などを使ってマッピングを知ることができます。
auto.masterは、redhatバリアントとypbindを使用している場合は、/ etc / ypsrc /ディレクトリにある可能性があるauto.homeなどのマッピングを使用することに注意してください。マッピングを表示するには、「automount -m」または「sudo automount -m」を使用してください。 NISサーバーのマッピングを変更するには、/var/yp/で "make"を実行する必要があります。
/etc/ypsrc/auto.homeを使用すると、自動マッパーはディレクトリをclient:/homeディレクトリにマウントできます。したがって、/ mntで "本当に" mkdirが必要な場合は、マウントポイントを/ homeに移動してから許可する必要があります。恐ろしい「許可拒否」エラーは発生せずに/ mntでmkdirを実行できますが、実際には/ mntを使用して任意のディレクトリを作成しないでください。 IMHO。要約すると、すでに使用されているマウントポイントではmkdirを実行できません。これは/autofsを自動マウントしたり、/mnt <に誤った所有者/グループを割り当てたりするのに問題がある可能性があります。