ایده کلی:
میخوایم یک حافظه رو تو شبکه محلی (مثلا خونه) به اشتراک بگذاریم تا بتونیم راحت با یک نام کاربری به اطلاعاتمون دسترسی داشته باشیم.
مورد نیازها:
- اول از همه به یک حافظه نیاز داریم برای اینکه اون رو تو شبکه به اشتراک بگذاریم، که میتونه یک فلش یا یک هارد دیسک اکسترنال باشه که البته من ترجیح دادم از هارد اکسترنال که برقش جدا تامین میشه استفاده کنم که بهش هارد اکسترنال دسکتاپی و یا هارد اکسترنال ۳.۵ اینچی میگن. هاردی که خودم استفاده کردم یک هارد ۳ ترابایتی هست که داخل عکس معلومه، به نسبت خیلی بزرگ هست و شما میتونید از حافظههای کوچکتر استفاده کنید.
- بعد نیاز به یک برد Raspberry Pi داریم که با یک شارژر گوشی اندروید ساده روشن میشه،
- یک حافظه MicroSD ترجیحا ۸ گیگ،
- یک سوییچ شبکه (اینجا از مودم ADSL بیسیم که دارای ۴ پورت شبکه هست استفاده شده چون سرویسهایی مانند DHCP و اتصال به اینترنت و سوییچ شبکه را خودکار انجام میده)
- و یک مقدار اینترنت جهت دانلودها و جستجوی مطالب مورد نیاز. :)
(مطالب یک برداشت و ترجمه داغون و سر هم بندی شده از منابع مختلف و بلاهایی که سر هارد خودم آوردم هست )
خب اول باید روی کارت حافظه MicroSD یک سیستم عامل نصب کنیم تا برد از روی اون بوت بشه؛ برای این برد سیستم عامل های متفاوتی ارائه شده و من از Raspbian استفاده کردم. دانلود
ایمیج دانلود شده رو طبق دستورات این لینک به روی کارت حافظه منتقل میکنید و MicroSD رو داخل شیار مخصوص روی برد قرار میدهید.
اگر از طریق ویندوز میرید اینجا من خودم از rufus استفاده میکنم.
اگر از طریق گنو/لینوکس اقدام میکنید از اینجا که به راحتی از دستور dd استفاده میکنید. ؛)
در این لینک آموزش نحوه بوت کردن برد از روی یک فلش مموری را آموزش میدهد؛
همچنین معمولا از تمام فضای کارت حافظه استفاده نمیشود، در مرحله ۵ همین لینک نحوه رفع این مسئله توضیح داده شده.
حالا برد رو روشن و با کابل شبکه به مودم متصل میکنیم؛ در اینجا باید با برد ارتباط برقرار کنیم اگر شد موس و کیبرد و مانیتور رو به برد وصل میکنیم و مستقیما ادامه میدهیم، ولی نیازی به این کار نیست با داشتن آدرس IP برد از سیستم با ssh به برد متصل میشویم، که در ویندوز با استفاده از نرمافزار putty و در گنو/لینوکس هم که به راحتی با دستور ssh user@ipaddress این امر میسر هست؛ نام کاربری پیشفرض سیستم عامل راسپبیان pi و رمز ورودش raspberry هست.
حالا که به سیستم لاگین کردید ابتدا باید مخازن رو آپدیت کنید با دستور sudo apt-get update چند لحظه زمان میبرد؛
برای پشتیبانی از فایل سیستم ها و اشتراک گذاری از طریق smb موارد زیر را نصب میکنیم:
sudo apt-get install ntfs-3g
sudo apt-get install samba
sudo apt-get install samba-common-bin
*. در اول کار ممکن است به علت تنظیم نبودن موقعیت زمانی با خطایی مانند خطای زیر روبهرو شوید:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = "en_GB.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory
برای رفع این خطا طبق راهنمایی این لینک عمل کنید
خب باید مطمئن شویم که هارد اکسترنال من جایی مونت نشده باشد، اول با دستور sudo fdisk -l چک میکنم که هارد من رو شناخته باشه، خروجی دستور چیزی شبیه این هست:
Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes 4 heads, 16 sectors/track, 243200 cylinders, total 15564800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xa6202af7 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 15564799 7720960 83 Linux Note: sector size is 4096 (not 512) Disk /dev/sda: 3000.6 GB, 3000558944256 bytes 255 heads, 63 sectors/track, 45599 cylinders, total 732558336 sectors Units = sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x00028375 Device Boot Start End Blocks Id System /dev/sda1 667022336 732558335 262144000 5 Extended /dev/sda2 262144256 667022335 1619512320 7 HPFS/NTFS/exFAT /dev/sda3 256 262144255 1048576000 83 Linux /dev/sda5 667022592 732558335 262142976 7 HPFS/NTFS/exFAT Partition table entries are not in disk order
خب همونطور که معلومه دیسک اول که به نام /dev/mmcblk0 شناخته کارت حافظه هست و دیسک دوم که با نام /dev/sda/ شناخته هارد اکسترنال مورد نظر. (چه پارتیشن بندی داغونی هم داره ولی خب! ؛> ) ما فرض میکنیم که کل هارد رو یک پارتیشن NTFS در نظر گرفتیم و اون هم به نام sda1 :)
حالا با دستور df چک میکنیم چه مواردی مونت شده هستند اگر در خروجی خبری از هارد نبود -دراینجا /dev/sda/- یعنی مونت نشده.
من میخوام در مسیر /media/ یک دایرکتوری به نام storage بسازم و هارد رو اونجا مونت کنم.
sudo mkdir /media/storage
حالا میخوایم پارتیشن مورد نظر هارد رو در این مسیر مونت کنیم برای مونت کردن پارتیشن NTFS از این دستور استفاده میکنیم:
sudo mount -t auto /dev/sda1 /media/storage
الآن میریم برای اشتراک گذاری. یک پوشه داخل هاردمون میسازیم تا اون رو share کنیم تا از طریق شبکه به اطلاعات داخلش دسترسی داشته باشیم.
sudo mkdir /media/storage/share
تا الآن همه کارها رو با یوزر pi انجام میدادیم اما بهتره که از یوزر دیگهای استفاده کنیم. برای این منظور یک یوزر ایجاد میکنیم به نام USERNAME که شما اسم مورد نظرتون رو بجاش وارد کنید.
useradd USERNAME -m -G users
ساخت پسورد
passwd USERNAME
متصل کردن یوزر محلی به سرویس SAMBA
smbpasswd -a USERNAME
باید فایل تنظیمات SAMBA رو پیکربندی کنیم:
اول از همه و مهم پشتیبانگیری از این فایل
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
و بعد اعمال تغییرات؛ با یک ادیتور مثل nano و یا vi فایل تنظیمات و رو باز میکنیم و تغییرات رو اعمال میکنیم:
nano /etc/samba/smb.conf
به آخر فایل موارد زیر را اضافه میکنیم
security = user ###### SHARES ###### [media] comment = Media share path = /media/storage/share valid users = @users force group = users create mask = 0660 directory mask = 0771 read only = no
داخل [] اسم مورد نظر برای دایرکتوری اشتراک گذاشته شده رو بنویسید.
روبه روی path و به جای /media/storage/share آدرس اون دایرکتوری رو که داخل هارد ساخته بودیم برای اشتراک گذاری رو قرار بدید.
در پایان فایل مورد نظر رو ذخیره و سرویس رو ریست میکنیم:
sudo service samba restart
بروزرسانی: دستور ریستارت سرویس در نسخههای جدید تغییر کرده است. برای ریستارت کردن سرویس smb از دستور زیر استفاده میکنیم:
sudo service smbd restart
از این به بعد از طریق گوشی هوشمند، سیستم شخصی، لپتاپ و سایر موارد مشابه که در شبکه ما قرار دارند با استفاده از یوزر به اطلاعات هارد دسترسی خواهید داشت.
برای آندروید من از اپلیکشن ES File Explorer
پ.ن: اگر بعد از هر ریستارت هارد خودش مونت نمیشود و مجبور هستید دوباره دستی مونت کنید از راهنمایی لینک زیر استفاده کنید.
http://www.techjawab.com/2013/06/how-to-setup-mount-auto-mount-usb-hard.html
نکات:
ممکنه بخواید یک یا چند گروه بسازید و کاربرها رو داخل یک گروه مشابه یا چند گروه قرار بدید.
- برای ساخت گروه از دستور زیر میتونیم استفاده کنیم:
sudo groupadd MYGROUPNAME
- برای اضافه کردن یک User که از قبل ساخته شده بوده به یک گروه از دستور زیر استفاده میکنیم:
sudo usermod -a -G MYGROUPNAME USERNAME
-
برای اینکه بتونیم چک کنیم هر User در چه گروههایی عضو هست و id اونها چیه از دستور زیر استفاده میکنیم:
id USERNAME
- برای بررسی Owner دایرکتوریها مورد نظر میتونیم از دستور زیر استفاده کینم:
sudo ls -ltrh
البته میتونیم از روشهای دیگه هم استفاده کنیم. خروجی دستوری بالا چیزی شبیه به زیر هست:total 212K -rwxrwxrwx 1 root root 168K Apr 7 2017 MyFile.txt drwxrwxrwx 1 root root 0 Nov 2 2018 MyDirectory drwxrwxrwx 1 root root 0 Jan 19 2019 AnotherFILE -rwxrwxrwx 1 root root 0 Apr 12 2019 DIR2test
همینطور که دیده میشه در مثال بالا مالیکیت همه موارد بالا در اختیار کاربر root هست. - ممکنه لازم باشه مالک دادهها رو تغییر بدیم.
برای تغییر Owner از دستور کلی زیر استفاده میکنیم:sudo chown [OPTIONS] USER[:GROUP] FILE(s)
برای تغییر مالکیت به صورت سلسله مراتب تا پایینترین فایل و دایرکتوری از دستور زیر استفاده میکنیم:sudo chown -R USER:GROUP DIRECTORY
منابع: