- 投稿日:2021-01-08T21:27:20+09:00
電子メールサービス - Postfix と Devecot
Postfix
プログラム
プログラム 役割 sendmail sendmail互換I/F smtpd 外部配送処理 pickup maildropキューを監視し、内部配送を処理する cleanup ヘッダの書き換えなどを行って、incomingキューに入れ、qmgrに通知する qmgr キュー内のメールを配送プログラムに渡す nqmgr qmgrと同じだが配送アルゴリズムが異なる master 全体の制御をするデーモン bounce バウンスメールの処理 設定
ファイル名 役割 main.cf MTAとしての設定ファイル master.cf Postfixを構成する各種デーモンの設定ファイル main.cf
main.cf#自ホスト名 myhostname = mail.example.com #ドメイン名 mydomain = example.com #メールアドレスの@以降に適用されるドメイン名 myorigin = $mydomain #ipv4に限定 inet_interfaces = all #ipv4に限定 inet_protocols = ipv4 #ローカル配送を行うドメイン名 mydestination = $ myhostname, localhost.$mydomain, localhost, $mydomain #中継を許可するSMTPクライアントのアドレス mynetworks = 192.168.1.0/24, 127.0.0.0/8 #メールプールディレクトリ mail_spool_directory = /var/spool/mail #ローカル配送を行うプログラム mailbox_command = /var/bin/procmail #SMTPで出力されるバナー情報 smtpd_banner = $myhostname ESMTP $main_name
- postconf : 全設定値が表示されます。
- -n オプションをつけると、デフォルト値から変更されている箇所のみが表示されます。
- パラメータを指定すると、指定したパラメータのみが表示されます。
メールのリレー
リレー:MTA間でのメールの中継
他のホストに宛てたメールを受け取った場合、MTAはそのメールのリレーを許可すべきかどうか判断します。
- 基本
- リレーを許可したいLAN内からのアウトバウンドメールは許可する。
- リレーを許可したい場合ドメインのメールは許可する。
- 外部からのアウトバウンドメールは拒否する。
mydestination や mynetworks で、適切な設定を行う。
バーチャルドメイン
バーチャルドメイン:設定ファイルに含まれるドメイン名とは異なるドメインのメールも扱うことができる。(もちろん、MXレコードに登録されている必要がある。)
main.cfvirtual_alias_domains = example.net virtual_alias_maps = hash:/etc/postfix/virtual/etc/postfix/virtual には、どのユーザーにメールが届くか指定し、Postfix を再起動する必要がある。
/etc/postfix/virtualpostmaster@example.net postmaster info@example.net info-net# postmap /etc/postfix/virtualpostfixコマンド
サブコマンド 説明 check 設定ファイルの構文チェック start 開始 stop 停止 abort 強制停止 reload 設定を再読み込み flush キュー内にあるメッセージを再送する ncコマンド
ncコマンドを使って、接続のテストを行えます。
メソッド 説明 HELO ホスト SMTPセッションを開始する EHLO ホスト 拡張HELO MAIL FROM: メールの送信元を指定する PCRT TO: メールの宛先を指定する DATA メールの本文を開始する QUIT SMTPセッションを終了する VRFYユーザー ユーザーの確認 EXPNユーザー ユーザーのエイリアスの確認 メールエイリアスと転送
/etc/aliases
/etc/aliasespostmaster: taro,hanako上記のユーザー名以外にも、次のような形式で指定することもできます。標準入力に送る例です。
/etc/aliaseslinuc: |/home/linucuser/bin/mcheck設定を反映ささせるには、newaliases を使います。
.forward
.forwardファイルを作成すると、そのユーザー宛に届いたメールを、任意のメールアドレスに転送することができます。
/home/linuc/.forwardtest@mx.example.comSMTP認証
main.cf に次の設定を追加します。(SMTP認証に、dovecot を利用する例です。)
main.cfsmtp_sasl_type = dovecot smtp_sasl_puth = private/auth smtp_local_domain = $myhostname smtp_sasl_security_options = noanonymos broken_sasl_auth_clients = yes smtp_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination認証タイプを、dovecot としたので、devecotの設定ファイルを編集します。
/etc/devecot/conf.d/10.master.conf#Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }/etc/devecot/conf.d/10.auth.confauth_mechanisms = plain loginSMTP over SSL/TLS
SMTP認証の場合、心配な点は、PLAIN,LOGIN が脆弱であるということです。その場合に、SSL/TLS(SMTPS) を導入します。
main.cfsmtpd_use_tls = yes smtpd_tls_cert_file = /usr/share/ssl/certs/mail.toritonssl.com.cert smtpd_tls_key_file = /usr/share/ssl/private/mail.toritonssl.com.keymaster.cfsmtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o milter_macro_daemon_name=ORIGINATING -o smtpd_client_restrictions=permit_sasl_authenticated,rejecttelnet でローカルホストの Postfix に接続して確認し、「STARTTLS」という表示がされていればOK。
メールキュー
メールキュー 説明 maildrop ローカル配信に使われる incoming 送受信処理中のメールが保持される active 配信待ちメールが保持される deferred 送信に失敗したメールが暫く保持される
メールキューを確認する。
- mailq
- postqueue -p
キュー内のメールを直ちに送信する。
- postqueue -f
- postfix flush
キュー内のメールを削除する。
- postsuper -d
ログ
/var/log/messege
に保存される。Devecot
設定ファイル
設定フィル 説明 devecot.conf メイン設定ファイル conf.d/10-auth.conf ユーザー認証関連 conf.d/10-logging.conf ログ関連 conf.d/10-mail.conf メールの配送関連 conf.d/10-master.conf 基本動作 conf.d/10-ssl.conf SSL/TLS関連 conf.d/15-lda.conf ローカル配送関連 conf.d/20-imap.conf IMAP関連 conf.d/20-pop3.conf POP3関連 devecot.conf
プロトコル ポート番号 POP3 110 IMAP 143 POP3 995 IMAPS 993 devecot.confprotocolos = imap imaps pop3 pop3s10-auth.conf
認証メカニズム 説明 plain 平文によるユーザー認証(RFC4616) login 平文によるユーザー認証(標準仕様なし) cram-md5 チャレンジレスポンスによるユーザー認証(RFC2195) 10-auth.confauth_mechanisms = plain login10-mail.conf
メールの配送場所と配送形式を指定する。
10-mail.confmail_location = maildir:~/Maildir10-ssl.conf
10-ssl.confssl = yesdeveconf
deveconf : 設定値を表示する
doveadm
サブコマンド 説明 reload 設定を再読み込み stop 停止 log find ログファイルのパスを確認 log test テストログメッセージの生成 pw パスワードのハッシュ値を生成 設定例
1.AレコードとMXレコードの作成
まず、AレコードとMXレコードを作成する。
AWSサービスが好きなので、Route53を使って行います。
なお、ドメインは無料で取得できる Freenom で登録し、NSレコードは既に登録済のものとする。
- ホスト名:mail.naata-swh.tk
- IPアドレス:...
- プライオリティ(優先順位):10
念の為、dig で確認しておく。
# dig naata-swh.tk mx2.AWSでメール送信制限解除を行う
今回はEC2上にメールサーバーを構築する。
AWSではスパム対策として、SMTPの利用が制限されているため、メール送信制限解除申請を行う必要がある。
申請方法については下記のAWSのナレッジを参考に行う。
EC2 インスタンスからポート 25 の制限を削除するにはどうすればよいですか?
※承認されるまで24時間程度かかる。3.セキュリティグループの設定
メールで利用する次のポートを開けておく。
- SMTP(25)
- SMTPS(465)
- IMAPS(993)
- POP3S(995)
- POP3(110)
- IMAP(143)
証明書は、フリーの Let's Encrypt を利用する。証明書更新に利用するため以下のポートも開けておく。
- HTTP(80)
- HTTPS(443)
4.Postfix設定
Amazon Linux 2 では Postfix がデフォルトでインストールされていいるので、後はSMTP認証に必要なパッケージのみをインストールする。
# yum install cyrus-sasl # systemctl start saslauthd # systemctl enable saslauthdmain.cf を更新します。パラメータの説明はこのページでも説明していますし、ググれば多数出てくるので割愛します。
/etc/postfix/main.cfmyhostname = mail.naata-swh.tk mydomain = naata-swh.tk myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks = 10.0.0.0/16, 127.0.0.0/8 home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP unknown smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination設定に誤りがないか確認し、問題がなければ、postfix を開始させましょう。
# postfix check # systemctl restart postfix5.ローカルユーザー作成
# useradd testuser01 # passwd testuser01 # useradd testuser02 # passwd testuser025.test
Amazon Linux はデフォルトで mail コマンドが使えないので、インストールします。
# yum install mailxtestuser01ユーザーから、testuser02ユーザーへメールを送信してみます。
mail testuser02@naata-swh.tk Subject: test testtestuser02ユーザーにメールが届いているか確認します。
# ls -la /home/testuser02/Maildir/new/ total 4 drwx------ 2 testuser02 testuser02 62 Dec 6 11:52 . drwx------ 5 testuser02 testuser02 39 Dec 6 11:52 .. -rw------- 1 testuser02 testuser02 537 Dec 6 11:52 1607255523.Vca01I8066e8M374256.mail.naata-swh.tk6.Let's Encrypt で証明書を取得する
次のページを参考に、証明書を取得する。
Amazon Linux2でLet's Encrypt使おうとしたらコケた話Python と pip が必須なようです。Pythonは既にインストールされていたので、pip のみインストールします。
# yum install python-pipcertbot-auto を入手し、権限設定する。
# cd /usr/local/bin # wget https://dl.eff.org/certbot-auto # chmod 700 certbot-autocertbot-autoを修正する。
certbot-autoelif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then #↑の部分を↓にように編集する。 elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \ grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then修正した certbot-auto を利用して、証明書を取得する。
# ./certbot-auto certonly --standalone \ -d mail.naata-swh.tk \ -m user@naata-swh.tk \ --agree-tos -n FATAL: Amazon Linux support is very experimental at present... if you would like to work on improving it, please ensure you have backups and then run this script again with the --debug flag! Alternatively, you can install OS dependencies yourself and run this script again with --no-bootstrap.失敗したようなので、デバックモードで調べると、足りないパッケージがあるようなので、インストール後、再度証明書を取得する。
# ./certbot-auto --debug # ./certbot-auto certonly --standalone \ -d mail.naata-swh.tk \ -m user@naata-swh.tk \ --agree-tos -n次のとおり必要なファイルがインストールされる。
/etc/letsencrypt/live/mail.naata-swh.tk/# ls -ls total 4 0 lrwxrwxrwx 1 root root 41 Dec 7 04:10 cert.pem -> ../../archive/mail.naata-swh.tk/cert1.pem 0 lrwxrwxrwx 1 root root 42 Dec 7 04:10 chain.pem -> ../../archive/mail.naata-swh.tk/chain1.pem 0 lrwxrwxrwx 1 root root 46 Dec 7 04:10 fullchain.pem -> ../../archive/mail.naata-swh.tk/fullchain1.pem 0 lrwxrwxrwx 1 root root 44 Dec 7 04:10 privkey.pem -> ../../archive/mail.naata-swh.tk/privkey1.pem 4 -rw-r--r-- 1 root root 692 Dec 7 04:10 README7.SSL/TLSの設定
main.cf で SMTP認証に、saslauthd を利用する設定へ変更する。
main.cfmessage_size_limit = 20971520 smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_client_restrictions = permit_mynetworks,reject_unknown_client,permit smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination smtpd_use_tls = yes smtp_tls_security_level = may smtpd_tls_cert_file = /etc/letsencrypt/live/mail.naata-swh.tk/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/mail.naata-swh.tk/privkey.pem smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache smtpd_tls_received_header = yes smtpd_tls_loglevel = 1 smtpd_tls_session_cache_timeout = 3600smaster.cf で必要な設定をコメントインしていく。
master.cf# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #smtp inet n - n - 1 postscreen #smtpd pass - - n - - smtpd #dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy submission inet n - n - - smtpd # -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd # -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATINGsaslauthd を起動、自動起動、postfix も再起動しておく。
# systemctl start saslauthd # systemctl enable saslauthd # systemctl restart saslauthd8.devecotの設定
とりあえず、devecot をインストールしておく。
# yum install -y devecot利用するプロトコルの設定をする。
dovecot.confprotocols = imap pop3ポートや認証リスナーの設定をおこないます。
10-master.confservice imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 995 ssl = yes } } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }認証方式の設定をする。
10-auth.confdisable_plaintext_auth = no auth_mechanisms = plain loginSSL/TLSの有効化と証明書・秘密鍵を指定する。
10-ssl.confssl = yes ssl_cert = </etc/letsencrypt/live/mail.hogehoge.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.hogehoge.com/privkey.pemメールボックスの場所を指定する。
10-mail.confmail_location = maildir:~/Maildirログを出力するディレクトリを作成し出力先を変更する。
# mkdir /var/log/dovecot10-logging.conflog_path = /var/log/ dovecot/dovecot.logdovecot の開始と自動起動。
# systemctl start dovecot # systemctl enable dovecot9.ログローテーションの設定
Postfix用のログディレクトリを作成する。
# mkdir /var/log/mailrsyslgの設定を変更する。
etc/rsyslog.confmail.* -/var/log/mail/maillogSyslogサービスを再起動し、不要なログを削除する。
# systemctl restart rsyslog # rm -f /var/log/maillog*rsyslogのログローテーションからメールのログを外します。
/etc/logrotate.d/syslog# /var/log/maillog ← 削除Postfixのログローテーションを作成する。
/etc/logrotate.d/maillog/var/log/mail/maillog { daily missingok dateext rotate 60 sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }Dovecotもログローテーションも作成する。
/etc/logrotate.d/dovecot/var/log/dovecot/dovecot.log { daily missingok dateext rotate 60 sharedscripts postrotate /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true endscript }ログローテーションされるか確認する。
# logrotate -dv /etc/logrotate.d/maillog # logrotate -dv /etc/logrotate.d/dovecot新規ユーザー追加時、Maildir形式のディレクトリが自動で作成されるように設定しておく。
# sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp} # sudo chmod -R 700 /etc/skel/Maildir/月1でLet's Encrypt証明書自動更新させるようにする。
/etc/cron.d/letsencrypt00 05 01 * * root /usr/local/bin/certbot-auto renew -q --no-self-upgrade --deploy-hook "service postfix restart && service dovecot restart"10.test2
ユーザーを作成する。
# useradd -s /sbin/nologin testuser # passwd testuserお使いのメールソフトに必要な情報を設定する。
- メールアドレス:usertest03@naata-swh.tk
- パスワード:設定したパスワード
- 受信サーバー:IMAPS mail.naata-swh.tk 993
- 送信サーバー:SMTPS mail.naata-swh.tk 465
自分のGmailとかに送信テストする。
リンク
- 投稿日:2021-01-08T19:34:38+09:00
備忘録
- 投稿日:2021-01-08T19:34:38+09:00
AWS,Dockerによるインフラ構築練習 備忘録
- 投稿日:2021-01-08T14:26:59+09:00
Linuxでのsambaのマウント。起動時にマウントするまで。
sambaをマウントしたい。どうせなので起動時にマウントしたい。
環境は Raspberry Pi 4 の Raspberry Pi OS 10.7
sambaサーバーを勉強に立てたので、それをマウントするまでに調べたことのまとめ。
mountコマンドでのマウント → fstab に記述しての起動時の自動マウントの順にやりました。mountコマンドの基本
マウントコマンドの基本は
$ mount -t <ファイルシステムのタイプ> <デバイス> <マウントポイント>オプション- t で指定すべきタイプ
オプション -t で指定するのはファイルシステムのタイプ。
ファイルシステムとはなんぞやというのはここでは置いておいて、
今回 samba のマウントで指定べきタイプは-t cifs
になる。ファイルシステムに
cifs
を指定するためにはcifs-utils
がインストールされていなければならないので、一応確認しておきましょう。$ apt list cifs-utils 一覧表示... 完了 cifs-utils/stable,now 2:6.8-2 armhf [インストール済み]大抵は
smbclient
と一緒にインストールされてるはず。オプション -o で指定すべきもの
mountコマンドには
-r
-w
などのオプションもあるが使わない。
その他の細かいオプションはすべて-o <オプション>,<オプション>,<オプション>
のように-o
の後にコンマ区切りで併記していく。mount.cifs のオプション
-t cifs
を指定すると mount.cifs が呼び出されるので、そちらのオプションを見なければならない。
ファイルシステムによって動きが違うから使えるオプションも変わるのだなと私は理解しました。mount.cifs について
http://www.samba.gr.jp/project/translation/3.5/htmldocs/manpages-3/mount.cifs.8.htmlというわけで -o の後に書くべきものは、
-o user=<ユーザー名>,password=<パスワード>
がまず最低限必要になります。
- 他に書くべき候補
rw
(読み取り書き込みできるようにするもの。私はうまくいかず↓を使った)file_mode=664
(マウントしたファイルのパーミッションの指定)dir_mode=775
(マウントしたディレクトリのパーミッションの指定)uid=<ユーザー名>
(マウントするもののオーナーを任意のユーザーにする)gid=<グループ名>
(マウントするもののグループを任意のグループにする)ここまでを整理として、ここまででできた部分を繋げるとこう。
mount -t cifs -o user=<ユーザー名>,password=<パスワード>,file_mode=664,dir_mode=775
マウントの実行
マウントするためにはマウントする場所にディレクトリが必要なので /mnt の下に作成する。
# mkdir -m 777 /mnt/<マウントポイント>
ようやくマウントができる。
# mount -t cifs -o user=<ユーザー名>,password=<パスワード>,file_mode=664,dir_mode=775 //<ホストアドレス>/<ディレクトリ> /mnt/<マウントポイント>確認
$ df -Th
アンマウント
$ unmount /mnt/<マウントポイント>
/etc/fstab へ記述して起動時にマウントする
/etc/fstab はマウントするデバイスとファイルシステムを記述するファイルで起動時に読まれる。
fstabの基本
記述は、
<デバイス> <マウントポイント> <ファイルシステムのタイプ> <オプション> <dump> <fsck>
<dump>
には0~1
<fsck>
には0~2
が入る。
その役割はここでは置いておいて、sambaのマウントを考えるなら両方0
を入れる。あとは mountコマンド でマウントした時の記述と同じ。
ファイルシステムはcifs
オプションは-o
の後にコンマ区切りで記述したものです。リモートファイルシステムはsystemdに自動マウントさせる
起動時にリモートファイルシステムをマウントさせるなら、systemdによる自動マウントさせましょう。
_netdev,x-systemd.automount
のふたつのオプションを記述するだけで、マウントをネットワークがオンラインになるまで待ち、またそのあとsystemdがうまいことマウントしてくれます。このあたりのテクニックについては ArchWiki の fstab の頁にわかりやすく書いてありそれを読みました。
https://wiki.archlinux.jp/index.php/Fstab/etc/fstab にパスワードを書きたくない
/etc/fstab
はおそらく多くの人のアクセスできるようすべきファイルで、そんなところにパスワードを書きたくはありません。そんな時は
credentials=<path>
オプションを使い、ユーザーとパスワード情報を記述したファイルを別に用意してそれを読ませましょう。今回は
/etc
にsmb-credentials
というディレクトリを作りその中に.password1
というファイルを作ることにします。
パーミッションを適切に管理しましょう。
.password1
に記述すべき書式は以下の通り。username=<ユーザ名> password=<パスワード>fstab への記述
/etc/fstab
に記述します。//<ホストアドレス>/<ディレクトリ> /mnt/<マウントポイント> cifs _netdev,x-systemd.automount,credentials=/etc/smb-credentials/.password1,file_mode=664,dir_mode=775 0 0
reboot
してマウントできれば成功。
- 投稿日:2021-01-08T06:39:36+09:00
ファイルシステム別の制限事項まとめ
1.この記事の内容
ファイルシステムの種類とOSとの対応関係及び制限事項を整理します.
ファイルシステムとは,OSが提供する機能の一つで,HDDやUSBメモリ等の記憶装置に保存されたデータの管理や操作に必要な機能です.
フォーマットの際に,FAT32,exFAT,NTFS等が指定できますが,OSごとに対応するフォーマットが異なります.例えば,FAT32はWindowsやMac,Linux,raspbian等多くのOSが対応している為,FAT32でフォーマットした記憶装置を用いるとパソコン間でデータの受け渡しが可能となります.
ただし,ファイルシステムごとに,1ファイルのサイズ上限や,1フォルダ内に格納可能なファイル数等の制限がある為,注意が必要です.本記事の調査にあたり参照したサイトは,ページ下部の関連リンクに記載しています.
2.ファイルシステムの種類とOSとの対応関係一覧
個人的によく使用する,FAT32,exFAT,NTFS,ext4について調査しました.
RW:読み書き可能
RO:読み取りのみ可能
×:非対応
ファイルシステム Windows Mac Linux ボリュームサイズ 1ファイルの最大サイズ 1ディレクトリ内の最大ファイル数 FAT32 RW RW RW 2TiB
※Windowsでは32GiB4GiB 65,535(※1) exFAT RW RW × 64ZiB 16EiB 2,796,202 NTFS RW × × 16EiB 16EiB 4,294,967,295 ext4 × × RW 1EiB 16TiB i-nodeに依存 ※1:ファイル名が8.3形式(ファイル名(8文字).拡張子(3文字))準拠かつルートディレクトリの場合のファイル数.ファイル数が長い場合やサブディレクトリの場合は,ファイル数が抑制される.
ファイル名の形式 ルートディレクトリ サブディレクトリ ファイル名備考 8.3形式 65,535 65,534 大文字と記号のみ12文字まで 13文字 65,535÷3→21,845 65,534÷3→21,844 小文字や数字含む13文字の例 25文字 65,535÷4→16,383 65,534÷4→16,383 小文字や数字含む25文字の例 3.さいごに
RaspberryPi上でCOCOデータセットの「2017 Test images [41K/6GB]」を扱おうと,FAT32でフォーマットしたUSBメモリにコピーを試みたところ,下記のエラーが発生し,FAT32の制約事項(1ディレクトリ内のファイル数超過)への該当が判明したことから本調査を行いました.
同様の問題に遭遇した方の参考になれば幸いです.
4.関連リンク
- ファイルシステム(FAT32、FAT16、NTFS、exFAT、HFS、HFS+、APFS)の違いについて
- OSの対応状況
- Linuxファイルシステムをまとめてみました
- テビバイト
- NTFS volとFAT32のディレクトリごとの最大ファイル数
- NTFS vs FAT vs exFAT
- Is There a Limit to What a Single Folder or Directory Can Hold?
- FAT32のファイルシステムで扱える最大ファイル数は65,535個?21,845個?
- Ubuntuでの1ディレクトリあたりのファイル数上限、容量上限はあるのでしょうか?
- linux(RHEL・CentOS・Amazon linux 2)のディレクトリの格納ファイル数上限
- ファイルシステムおよびストレージの制限
- Linuxのファイルシステムについて
- 投稿日:2021-01-08T02:25:57+09:00
SSH接続しようとしたら空き領域についての警告が出た。
こんな警告
サーバーにSSH接続しようとしたところ、こんな警告文が出ました。
SSH接続は出来ますが何とも気持ち悪い...ヒアドキュメント用一時ファイルを作成できません: デバイスに空き領域がありません空き領域が無いようなのでdfコマンドで確認すると以下のようになっていました。
使用率が100%になってますね。df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos-root 14G 14G 36K 100% /原因
恐らく負荷テストでリクエストを送りまくったことで、ログファイルがとんでもないサイズになっていると仮説を立てました。
ログファイルを確認したところ、サイズが9GB以上になっています。-rw-rw-r-- 1 hoge hoge 8403185664 1月 8 01:09 production.log -rw-rw-r-- 1 hoge hoge 991581155 1月 8 01:58 unicorn.stderr.log解決
ログファイルに/dev/nullをコピーしてログファイルの中身を空にしました。
これで警告が出なくなったので解決!cp /dev/null production.log-rw-rw-r-- 1 hoge hoge 0 1月 8 09:25 production.log -rw-rw-r-- 1 hoge hoge 0 1月 8 09:26 unicorn.stderr.log補足
「ヒアドキュメント用一時ファイルを作成できません: デバイスに空き領域がありません」で調べてみたところ、デプロイやコンパイルが出来なくなったりする事象もあるようです。
サーバー自体の挙動がおかしくなるようなので、事前に何らかの対処が必要ですね。(今回の場合は、古いログを自動で削除するようなスクリプトを書くか、OSやアプリケーションサーバでログを自動削除するような設定をするか...)
- 投稿日:2021-01-08T00:13:03+09:00